Skip to main content

openrouter/types/
organization.rs

1//! Types for the organization endpoints (`/organization/members`).
2//!
3//! Shapes mirror the Go SDK (`organization_models.go`). These endpoints
4//! require a **provisioning (management) API key**.
5
6use serde::{Deserialize, Serialize};
7
8/// Optional query parameters for [`crate::Client::list_organization_members`].
9#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
10pub struct ListOrganizationMembersOptions {
11    /// Skip this many rows before returning results.
12    pub offset: Option<u32>,
13    /// Cap on the number of rows returned.
14    pub limit: Option<u32>,
15}
16
17impl ListOrganizationMembersOptions {
18    /// Construct an empty options struct.
19    pub fn new() -> Self {
20        Self::default()
21    }
22
23    /// Builder: set [`Self::offset`].
24    pub fn offset(mut self, offset: u32) -> Self {
25        self.offset = Some(offset);
26        self
27    }
28
29    /// Builder: set [`Self::limit`].
30    pub fn limit(mut self, limit: u32) -> Self {
31        self.limit = Some(limit);
32        self
33    }
34
35    pub(crate) fn to_query(self) -> Vec<(&'static str, String)> {
36        let mut q = Vec::new();
37        if let Some(o) = self.offset {
38            q.push(("offset", o.to_string()));
39        }
40        if let Some(l) = self.limit {
41            q.push(("limit", l.to_string()));
42        }
43        q
44    }
45}
46
47/// Role of a member within the organization. Upstream uses prefixed
48/// values (`"org:admin"` / `"org:member"`).
49#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
50pub enum OrganizationMemberRole {
51    /// Organization administrator.
52    #[serde(rename = "org:admin")]
53    Admin,
54    /// Regular organization member.
55    #[serde(rename = "org:member")]
56    Member,
57}
58
59/// A single member of an organization.
60#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
61pub struct OrganizationMember {
62    /// Stable user identifier.
63    #[serde(default)]
64    pub id: String,
65    /// Member email address.
66    #[serde(default)]
67    pub email: String,
68    /// Optional first name.
69    #[serde(default)]
70    pub first_name: Option<String>,
71    /// Optional last name.
72    #[serde(default)]
73    pub last_name: Option<String>,
74    /// Role within the organization.
75    pub role: OrganizationMemberRole,
76}
77
78/// Response from `GET /organization/members`.
79#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
80pub struct ListOrganizationMembersResponse {
81    /// Member rows returned by the server.
82    #[serde(default)]
83    pub data: Vec<OrganizationMember>,
84    /// Total row count, ignoring pagination.
85    #[serde(default)]
86    pub total_count: u64,
87}