commit 6910ec87dce480055e0dae1574d075f0ede4ab25
parent 9526bd48f30c5b3da3d739c8a4b8296a91f9b791
Author: triesap <triesap@radroots.dev>
Date: Mon, 19 Jan 2026 00:57:18 +0000
app-core: add radroots client types
- define radroots account request and activation structs
- add media resource and image upload payload types
- introduce async radroots client trait with API methods
- add unit test covering media resource fields
Diffstat:
2 files changed, 84 insertions(+), 0 deletions(-)
diff --git a/crates/core/src/radroots/mod.rs b/crates/core/src/radroots/mod.rs
@@ -1,3 +1,13 @@
pub mod error;
+pub mod types;
pub use error::{RadrootsClientRadrootsError, RadrootsClientRadrootsErrorMessage};
+pub use types::{
+ RadrootsClientMediaImageUpload,
+ RadrootsClientMediaResource,
+ RadrootsClientRadroots,
+ RadrootsClientRadrootsAccountsActivate,
+ RadrootsClientRadrootsAccountsCreate,
+ RadrootsClientRadrootsAccountsRequest,
+ RadrootsClientRadrootsResult,
+};
diff --git a/crates/core/src/radroots/types.rs b/crates/core/src/radroots/types.rs
@@ -0,0 +1,74 @@
+use async_trait::async_trait;
+
+use super::RadrootsClientRadrootsError;
+
+pub type RadrootsClientRadrootsResult<T> = Result<T, RadrootsClientRadrootsError>;
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct RadrootsClientRadrootsAccountsRequest {
+ pub profile_name: String,
+ pub secret_key: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct RadrootsClientRadrootsAccountsCreate {
+ pub tok: String,
+ pub secret_key: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct RadrootsClientRadrootsAccountsActivate {
+ pub id: String,
+ pub secret_key: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct RadrootsClientMediaResource {
+ pub base_url: String,
+ pub hash: String,
+ pub ext: String,
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct RadrootsClientMediaImageUpload {
+ pub mime_type: Option<String>,
+ pub file_data: Vec<u8>,
+ pub secret_key: String,
+}
+
+#[async_trait(?Send)]
+pub trait RadrootsClientRadroots {
+ async fn accounts_request(
+ &self,
+ opts: RadrootsClientRadrootsAccountsRequest,
+ ) -> RadrootsClientRadrootsResult<String>;
+ async fn accounts_create(
+ &self,
+ opts: RadrootsClientRadrootsAccountsCreate,
+ ) -> RadrootsClientRadrootsResult<String>;
+ async fn accounts_activate(
+ &self,
+ opts: RadrootsClientRadrootsAccountsActivate,
+ ) -> RadrootsClientRadrootsResult<String>;
+ async fn media_image_upload(
+ &self,
+ opts: RadrootsClientMediaImageUpload,
+ ) -> RadrootsClientRadrootsResult<RadrootsClientMediaResource>;
+}
+
+#[cfg(test)]
+mod tests {
+ use super::RadrootsClientMediaResource;
+
+ #[test]
+ fn media_resource_fields_roundtrip() {
+ let resource = RadrootsClientMediaResource {
+ base_url: String::from("https://example.com"),
+ hash: String::from("hash"),
+ ext: String::from("png"),
+ };
+ assert_eq!(resource.base_url, "https://example.com");
+ assert_eq!(resource.hash, "hash");
+ assert_eq!(resource.ext, "png");
+ }
+}