fix(daemon): ship the OpenRPC document inside the crate
docs/openrpc.json lived at the repository root, outside the soulseek-rs package, so the include_str! in proto compiled from a checkout but not from the published tarball - cargo publish failed verification and the v13.0.0 release stopped after publishing the lib. The document moves into the crate's own docs/, where packaging can see it; the generator test and every link follow.
This commit is contained in:
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
# Generated and compared byte-for-byte by `daemon::openrpc::document_is_current`,
|
# Generated and compared byte-for-byte by `daemon::openrpc::document_is_current`,
|
||||||
# which builds its expectation with `\n`. A CRLF checkout would fail that test on
|
# which builds its expectation with `\n`. A CRLF checkout would fail that test on
|
||||||
# Windows.
|
# Windows.
|
||||||
docs/openrpc.json text eol=lf
|
soulseek-rs/docs/openrpc.json text eol=lf
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ the internet. Reach it over SSH instead, with a tunnel
|
|||||||
|
|
||||||
The daemon speaks newline-delimited JSON-RPC 2.0, described by an
|
The daemon speaks newline-delimited JSON-RPC 2.0, described by an
|
||||||
[OpenRPC](https://open-rpc.org) document,
|
[OpenRPC](https://open-rpc.org) document,
|
||||||
[`docs/openrpc.json`](docs/openrpc.json), which it also serves over
|
[`soulseek-rs/docs/openrpc.json`](soulseek-rs/docs/openrpc.json), which it also serves over
|
||||||
`rpc.discover`. Point a client generator at it for typed bindings in your
|
`rpc.discover`. Point a client generator at it for typed bindings in your
|
||||||
language. Searches, transfers, rooms, private messages and shares are all on
|
language. Searches, transfers, rooms, private messages and shares are all on
|
||||||
the interface this CLI uses, with no private back channel, and live updates are
|
the interface this CLI uses, with no private back channel, and live updates are
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
`soulseek-rs daemon` stays logged in and answers JSON-RPC over a socket, so
|
`soulseek-rs daemon` stays logged in and answers JSON-RPC over a socket, so
|
||||||
several clients can share one Soulseek session. The machine-readable contract
|
several clients can share one Soulseek session. The machine-readable contract
|
||||||
is [`openrpc.json`](openrpc.json), an [OpenRPC](https://open-rpc.org)
|
is [`openrpc.json`](../soulseek-rs/docs/openrpc.json), an [OpenRPC](https://open-rpc.org)
|
||||||
document and the JSON-RPC counterpart to OpenAPI. Point a client generator at it,
|
document and the JSON-RPC counterpart to OpenAPI. Point a client generator at it,
|
||||||
or at a running daemon via `rpc.discover`, and you have a client in your
|
or at a running daemon via `rpc.discover`, and you have a client in your
|
||||||
language.
|
language.
|
||||||
|
|||||||
@@ -348,10 +348,10 @@ fn document() -> Value {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Where the published document lives, relative to this source file.
|
/// Where the published document lives. Inside this crate, not the repository's
|
||||||
|
/// docs/: `include_str!` has to find it in the published package too.
|
||||||
fn document_path() -> std::path::PathBuf {
|
fn document_path() -> std::path::PathBuf {
|
||||||
std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
|
std::path::Path::new(env!("CARGO_MANIFEST_DIR"))
|
||||||
.join("..")
|
|
||||||
.join("docs")
|
.join("docs")
|
||||||
.join("openrpc.json")
|
.join("openrpc.json")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ pub const PROTOCOL_VERSION: u32 = 1;
|
|||||||
|
|
||||||
/// The OpenRPC document, served by `rpc.discover` so a generator can point at
|
/// The OpenRPC document, served by `rpc.discover` so a generator can point at
|
||||||
/// a running daemon instead of needing this repository.
|
/// a running daemon instead of needing this repository.
|
||||||
pub const OPENRPC: &str = include_str!("../../../../docs/openrpc.json");
|
pub const OPENRPC: &str = include_str!("../../../docs/openrpc.json");
|
||||||
|
|
||||||
mod dto;
|
mod dto;
|
||||||
mod envelope;
|
mod envelope;
|
||||||
|
|||||||
@@ -360,8 +360,8 @@ const Daemon = () => (
|
|||||||
<ExtLink href="https://open-rpc.org">OpenRPC</ExtLink> document. The daemon serves
|
<ExtLink href="https://open-rpc.org">OpenRPC</ExtLink> document. The daemon serves
|
||||||
that document itself through <Code>rpc.discover</Code>, so a client can ask it what
|
that document itself through <Code>rpc.discover</Code>, so a client can ask it what
|
||||||
it can do. The same document is checked in at{' '}
|
it can do. The same document is checked in at{' '}
|
||||||
<ExtLink href={`${LINKS.gh}/blob/master/docs/openrpc.json`}>
|
<ExtLink href={`${LINKS.gh}/blob/master/soulseek-rs/docs/openrpc.json`}>
|
||||||
docs/openrpc.json
|
soulseek-rs/docs/openrpc.json
|
||||||
</ExtLink>{' '}
|
</ExtLink>{' '}
|
||||||
on GitHub. <Code>auth</Code> answers with the protocol version, 1 today, so a
|
on GitHub. <Code>auth</Code> answers with the protocol version, 1 today, so a
|
||||||
client written against an older shape learns it at connect time.
|
client written against an older shape learns it at connect time.
|
||||||
|
|||||||
Reference in New Issue
Block a user