diff --git a/Cargo.toml b/Cargo.toml index 8d41de8c..89501bb7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ version = "0.0.1" [dependencies] js_int = "0.1.4" +ruma-api = "0.15.0" ruma-events = "0.18.0" ruma-identifiers = "0.14.1" serde = { version = "1.0.106", features = ["derive"] } diff --git a/src/lib.rs b/src/lib.rs index bd98af77..be7c5164 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,6 +10,9 @@ use ruma_identifiers::{EventId, RoomId, UserId}; use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; +mod unversioned; +mod v1; + /// A 'persistent data unit' (event) for room versions 3 and beyond. #[derive(Deserialize, Serialize)] pub struct RoomV3Pdu { diff --git a/src/unversioned.rs b/src/unversioned.rs new file mode 100644 index 00000000..13df6416 --- /dev/null +++ b/src/unversioned.rs @@ -0,0 +1 @@ +mod discover_homeserver; diff --git a/src/unversioned/discover_homeserver.rs b/src/unversioned/discover_homeserver.rs new file mode 100644 index 00000000..ed8f9f80 --- /dev/null +++ b/src/unversioned/discover_homeserver.rs @@ -0,0 +1,20 @@ +use ruma_api::ruma_api; + +ruma_api! { + metadata { + description: "Get discovery information about the domain.", + method: GET, + name: "discover_homeserver", + path: "/.well-known/matrix/server", + rate_limited: false, + requires_authentication: false, + } + + request {} + + response { + /// The server name to delegate server-server communciations to, with optional port. + #[serde(rename = "m.homeserver")] + pub homeserver: String, + } +} diff --git a/src/v1.rs b/src/v1.rs new file mode 100644 index 00000000..3f346b1e --- /dev/null +++ b/src/v1.rs @@ -0,0 +1 @@ +mod get_server_version; diff --git a/src/v1/get_server_version.rs b/src/v1/get_server_version.rs new file mode 100644 index 00000000..1fb9501b --- /dev/null +++ b/src/v1/get_server_version.rs @@ -0,0 +1,28 @@ +use ruma_api::ruma_api; +use serde::{Deserialize, Serialize}; + +ruma_api! { + metadata { + description: "Get the implementation name and version of this homeserver.", + method: GET, + name: "discover_homeserver", + path: "/.well-known/matrix/server", + rate_limited: false, + requires_authentication: false, + } + + request {} + + response { + /// Information about the homeserver implementation + server: Server, + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Server { + /// Arbitrary name that identify this implementation. + name: Option, + /// Version of this implementation. The version format depends on the implementation. + version: Option, +}