openrouter_rs/api/
organization.rs1use reqwest::Client as HttpClient;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5 error::OpenRouterError,
6 transport::{request as transport_request, response as transport_response},
7 types::PaginationOptions,
8};
9
10#[derive(Serialize, Deserialize, Debug, Clone)]
12#[non_exhaustive]
13pub struct OrganizationMember {
14 pub id: String,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub first_name: Option<String>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub last_name: Option<String>,
19 pub email: String,
20 pub role: String,
21}
22
23#[derive(Serialize, Deserialize, Debug, Clone)]
25#[non_exhaustive]
26pub struct OrganizationMembersResponse {
27 pub data: Vec<OrganizationMember>,
28 pub total_count: u64,
29}
30
31fn with_pagination(url: String, pagination: Option<PaginationOptions>) -> String {
32 let params = pagination
33 .map(PaginationOptions::to_query_pairs)
34 .unwrap_or_default()
35 .into_iter()
36 .map(|(key, value)| format!("{key}={value}"))
37 .collect::<Vec<_>>();
38
39 if params.is_empty() {
40 url
41 } else {
42 format!("{url}?{}", params.join("&"))
43 }
44}
45
46pub async fn list_organization_members(
48 base_url: &str,
49 management_key: &str,
50 pagination: Option<PaginationOptions>,
51) -> Result<OrganizationMembersResponse, OpenRouterError> {
52 let http_client = crate::transport::new_client()?;
53 list_organization_members_with_client(&http_client, base_url, management_key, pagination).await
54}
55
56pub(crate) async fn list_organization_members_with_client(
57 http_client: &HttpClient,
58 base_url: &str,
59 management_key: &str,
60 pagination: Option<PaginationOptions>,
61) -> Result<OrganizationMembersResponse, OpenRouterError> {
62 let url = with_pagination(format!("{base_url}/organization/members"), pagination);
63 let response = transport_request::with_bearer_auth(
64 transport_request::get(http_client, &url),
65 management_key,
66 )
67 .send()
68 .await?;
69
70 if response.status().is_success() {
71 transport_response::parse_json_response(response, "organization members").await
72 } else {
73 transport_response::handle_error(response).await?;
74 unreachable!()
75 }
76}