diff --git a/Cargo.lock b/Cargo.lock index 39d0b714..a05294e6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2662,6 +2662,7 @@ dependencies = [ "radicle-crypto", "radicle-fetch", "radicle-git-ext", + "radicle-protocol", "radicle-signals", "radicle-systemd", "scrypt", @@ -2674,6 +2675,42 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "radicle-protocol" +version = "0.1.0" +dependencies = [ + "amplify", + "anyhow", + "bloomy", + "byteorder", + "chrono", + "colored", + "crossbeam-channel", + "cyphernet", + "fastrand", + "io-reactor", + "lexopt", + "libc", + "localtime", + "log", + "netservices", + "nonempty 0.9.0", + "qcheck", + "qcheck-macros", + "radicle", + "radicle-crypto", + "radicle-fetch", + "radicle-git-ext", + "scrypt", + "serde", + "serde_json", + "snapbox", + "socket2", + "sqlite", + "tempfile", + "thiserror 1.0.69", +] + [[package]] name = "radicle-remote-helper" version = "0.11.0" diff --git a/Cargo.toml b/Cargo.toml index 306f27ec..3a3920fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,6 +47,7 @@ radicle-dag = { version = "0.10", path = "crates/radicle-dag" } radicle-fetch = { version = "0.12", path = "crates/radicle-fetch" } radicle-git-ext = { version = "0.8", default-features = false } radicle-node = { version = "0.12", path = "crates/radicle-node" } +radicle-protocol = { version = "0.1", path = "crates/radicle-protocol" } radicle-signals = { version = "0.11", path = "crates/radicle-signals" } radicle-ssh = { version = "0.9", path = "crates/radicle-ssh", default-features = false } radicle-systemd = { version = "0.9", path = "crates/radicle-systemd" } diff --git a/crates/radicle-node/Cargo.toml b/crates/radicle-node/Cargo.toml index ffa30054..e2e084bf 100644 --- a/crates/radicle-node/Cargo.toml +++ b/crates/radicle-node/Cargo.toml @@ -37,6 +37,7 @@ radicle-fetch = { workspace = true } # N.b. this is required to use macros, even though it's re-exported # through radicle radicle-git-ext = { workspace = true, features = ["serde"] } +radicle-protocol = { workspace = true } radicle-signals = { workspace = true } radicle-systemd = { workspace = true, optional = true } sqlite = { workspace = true, features = ["bundled"] } @@ -53,4 +54,4 @@ qcheck = { workspace = true } qcheck-macros = { workspace = true } radicle = { workspace = true, features = ["test"] } radicle-crypto = { workspace = true, features = ["test", "cyphernet"] } -snapbox = { workspace = true } \ No newline at end of file +snapbox = { workspace = true } diff --git a/crates/radicle-protocol/Cargo.toml b/crates/radicle-protocol/Cargo.toml new file mode 100644 index 00000000..8d0f5ecd --- /dev/null +++ b/crates/radicle-protocol/Cargo.toml @@ -0,0 +1,49 @@ +[package] +name = "radicle-protocol" +description = "The Radicle Protocol" +homepage.workspace = true +license.workspace = true +version = "0.1.0" +authors = ["Radicle Team "] +edition.workspace = true +rust-version.workspace = true + +[features] +test = ["radicle/test", "radicle-crypto/test", "radicle-crypto/cyphernet", "qcheck", "snapbox"] + +[dependencies] +amplify = { workspace = true } +anyhow = { workspace = true } +bloomy = "1.2" +byteorder = { workspace = true } +chrono = { workspace = true, features = ["clock"] } +colored = { workspace = true } +crossbeam-channel = { workspace = true } +cyphernet = { workspace = true, features = ["tor", "dns", "ed25519", "p2p-ed25519"] } +fastrand = { workspace = true } +io-reactor = { version = "0.5.1", features = ["popol"] } +lexopt = { workspace = true } +libc = { workspace = true } +log = { workspace = true, features = ["std"] } +localtime = { workspace = true } +netservices = { version = "0.8.0", features = ["io-reactor", "socket2"] } +nonempty = { workspace = true, features = ["serialize"] } +qcheck = { workspace = true, optional = true } +radicle = { workspace = true, features = ["logger"] } +radicle-fetch = { workspace = true } +radicle-git-ext = { workspace = true, features = ["serde"] } +sqlite = { workspace = true, features = ["bundled"] } +scrypt = { version = "0.11.0", default-features = false } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true, features = ["preserve_order"] } +snapbox = { workspace = true, optional = true } +socket2 = "0.5.7" +tempfile = { workspace = true } +thiserror = { workspace = true } + +[dev-dependencies] +qcheck = { workspace = true } +qcheck-macros = { workspace = true } +radicle = { workspace = true, features = ["test"] } +radicle-crypto = { workspace = true, features = ["test", "cyphernet"] } +snapbox = { workspace = true } diff --git a/crates/radicle-node/src/bounded.rs b/crates/radicle-protocol/src/bounded.rs similarity index 100% rename from crates/radicle-node/src/bounded.rs rename to crates/radicle-protocol/src/bounded.rs diff --git a/crates/radicle-node/src/service.rs b/crates/radicle-protocol/src/service.rs similarity index 100% rename from crates/radicle-node/src/service.rs rename to crates/radicle-protocol/src/service.rs diff --git a/crates/radicle-node/src/service/filter.rs b/crates/radicle-protocol/src/service/filter.rs similarity index 100% rename from crates/radicle-node/src/service/filter.rs rename to crates/radicle-protocol/src/service/filter.rs diff --git a/crates/radicle-node/src/service/gossip.rs b/crates/radicle-protocol/src/service/gossip.rs similarity index 100% rename from crates/radicle-node/src/service/gossip.rs rename to crates/radicle-protocol/src/service/gossip.rs diff --git a/crates/radicle-node/src/service/gossip/store.rs b/crates/radicle-protocol/src/service/gossip/store.rs similarity index 100% rename from crates/radicle-node/src/service/gossip/store.rs rename to crates/radicle-protocol/src/service/gossip/store.rs diff --git a/crates/radicle-node/src/service/io.rs b/crates/radicle-protocol/src/service/io.rs similarity index 100% rename from crates/radicle-node/src/service/io.rs rename to crates/radicle-protocol/src/service/io.rs diff --git a/crates/radicle-node/src/service/limiter.rs b/crates/radicle-protocol/src/service/limiter.rs similarity index 100% rename from crates/radicle-node/src/service/limiter.rs rename to crates/radicle-protocol/src/service/limiter.rs diff --git a/crates/radicle-node/src/service/message.rs b/crates/radicle-protocol/src/service/message.rs similarity index 100% rename from crates/radicle-node/src/service/message.rs rename to crates/radicle-protocol/src/service/message.rs diff --git a/crates/radicle-node/src/service/session.rs b/crates/radicle-protocol/src/service/session.rs similarity index 100% rename from crates/radicle-node/src/service/session.rs rename to crates/radicle-protocol/src/service/session.rs diff --git a/crates/radicle-node/src/wire.rs b/crates/radicle-protocol/src/wire.rs similarity index 100% rename from crates/radicle-node/src/wire.rs rename to crates/radicle-protocol/src/wire.rs diff --git a/crates/radicle-node/src/wire/frame.rs b/crates/radicle-protocol/src/wire/frame.rs similarity index 100% rename from crates/radicle-node/src/wire/frame.rs rename to crates/radicle-protocol/src/wire/frame.rs diff --git a/crates/radicle-node/src/wire/message.rs b/crates/radicle-protocol/src/wire/message.rs similarity index 100% rename from crates/radicle-node/src/wire/message.rs rename to crates/radicle-protocol/src/wire/message.rs diff --git a/crates/radicle-node/src/wire/protocol.rs b/crates/radicle-protocol/src/wire/protocol.rs similarity index 100% rename from crates/radicle-node/src/wire/protocol.rs rename to crates/radicle-protocol/src/wire/protocol.rs diff --git a/crates/radicle-node/src/wire/varint.rs b/crates/radicle-protocol/src/wire/varint.rs similarity index 100% rename from crates/radicle-node/src/wire/varint.rs rename to crates/radicle-protocol/src/wire/varint.rs