Skip to main content

polyoxide_gamma/api/
user.rs

1use polyoxide_core::{HttpClient, QueryBuilder, Request};
2use serde::{Deserialize, Serialize};
3
4use crate::error::GammaError;
5
6/// User API namespace
7#[derive(Clone)]
8pub struct User {
9    pub(crate) http_client: HttpClient,
10}
11
12impl User {
13    /// Get user details
14    pub fn get(&self, signer_address: impl Into<String>) -> Request<UserResponse, GammaError> {
15        Request::new(self.http_client.clone(), "/public-profile")
16            .query("address", signer_address.into())
17    }
18}
19
20/// User details response from the `/public-profile` endpoint
21#[derive(Debug, Clone, Serialize, Deserialize)]
22#[serde(rename_all = "camelCase")]
23pub struct UserResponse {
24    /// The user's proxy wallet address (Treasury)
25    #[serde(rename = "proxyWallet")]
26    pub proxy: Option<String>,
27    /// The user's EOA address (Signer)
28    pub address: Option<String>,
29    /// Account ID
30    pub id: Option<String>,
31    /// Username/Display name
32    pub name: Option<String>,
33    /// Account creation timestamp (ISO 8601)
34    pub created_at: Option<String>,
35    /// Profile image URL
36    pub profile_image: Option<String>,
37    /// Whether the username is displayed publicly
38    pub display_username_public: Option<bool>,
39    /// User biography
40    pub bio: Option<String>,
41    /// Auto-generated pseudonym
42    pub pseudonym: Option<String>,
43    /// Twitter/X handle
44    pub x_username: Option<String>,
45    /// Whether the user has a verified badge
46    pub verified_badge: Option<bool>,
47    /// User identity entries
48    #[serde(default)]
49    pub users: Vec<UserInfo>,
50}
51
52/// User identity entry returned inside a profile's `users` array
53#[derive(Debug, Clone, Serialize, Deserialize)]
54#[serde(rename_all = "camelCase")]
55pub struct UserInfo {
56    /// User ID
57    pub id: Option<String>,
58    /// Whether this user is a creator
59    #[serde(default)]
60    pub creator: bool,
61    /// Whether this user is a moderator
62    #[serde(rename = "mod")]
63    #[serde(default)]
64    pub moderator: bool,
65}