From 7cbe6e451d462ff0e657e1cb8098985c8bbb134d Mon Sep 17 00:00:00 2001 From: Guilherme Werner Date: Tue, 3 Jun 2025 19:45:24 -0300 Subject: [PATCH] Add wrapper struct --- .openapi-generator-ignore | 1 + .openapi-generator/FILES | 3 +- scripts/generate.ps1 | 2 +- src/apis/mod.rs | 2 +- ...ribufu_api.rs => tribufu_generated_api.rs} | 8 +- src/lib.rs | 109 +++++++++++++++++- 6 files changed, 113 insertions(+), 12 deletions(-) rename src/apis/{tribufu_api.rs => tribufu_generated_api.rs} (99%) diff --git a/.openapi-generator-ignore b/.openapi-generator-ignore index fa3ecbc..3f6703d 100644 --- a/.openapi-generator-ignore +++ b/.openapi-generator-ignore @@ -5,3 +5,4 @@ docs/ Cargo.toml git_push.sh README.md +src/lib.rs diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index 1c95218..573536a 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -1,7 +1,6 @@ src/apis/configuration.rs src/apis/mod.rs -src/apis/tribufu_api.rs -src/lib.rs +src/apis/tribufu_generated_api.rs src/models/account.rs src/models/application.rs src/models/application_type.rs diff --git a/scripts/generate.ps1 b/scripts/generate.ps1 index 4345088..5a1835e 100644 --- a/scripts/generate.ps1 +++ b/scripts/generate.ps1 @@ -6,5 +6,5 @@ java -jar ./vendor/openapi-generator/openapi-generator-cli.jar generate ` -o . ` --global-property apis,models,supportingFiles,apiDocs=false,modelDocs=false,apiTests=false,modelTests=false ` --additional-properties=packageName=tribufu,library=reqwest-trait,supportAsync=true,preferUnsignedInt=true ` - --openapi-normalizer SET_TAGS_FOR_ALL_OPERATIONS=Tribufu ` + --openapi-normalizer SET_TAGS_FOR_ALL_OPERATIONS=TribufuGenerated ` --skip-validate-spec diff --git a/src/apis/mod.rs b/src/apis/mod.rs index 6ebb1fb..9b4e9fb 100644 --- a/src/apis/mod.rs +++ b/src/apis/mod.rs @@ -111,7 +111,7 @@ impl From<&str> for ContentType { } } -pub mod tribufu_api; +pub mod tribufu_generated_api; pub mod configuration; diff --git a/src/apis/tribufu_api.rs b/src/apis/tribufu_generated_api.rs similarity index 99% rename from src/apis/tribufu_api.rs rename to src/apis/tribufu_generated_api.rs index b089fa9..2322174 100644 --- a/src/apis/tribufu_api.rs +++ b/src/apis/tribufu_generated_api.rs @@ -18,7 +18,7 @@ use super::{Error, configuration}; use crate::apis::ContentType; #[async_trait] -pub trait TribufuApi: Send + Sync { +pub trait TribufuGeneratedApi: Send + Sync { /// POST /v1/oauth2/authorize /// @@ -381,11 +381,11 @@ pub trait TribufuApi: Send + Sync { async fn update_user_profile<'id, 'update_profile>(&self, id: &'id str, update_profile: Option) -> Result>; } -pub struct TribufuApiClient { +pub struct TribufuGeneratedApiClient { configuration: Arc } -impl TribufuApiClient { +impl TribufuGeneratedApiClient { pub fn new(configuration: Arc) -> Self { Self { configuration } } @@ -394,7 +394,7 @@ impl TribufuApiClient { #[async_trait] -impl TribufuApi for TribufuApiClient { +impl TribufuGeneratedApi for TribufuGeneratedApiClient { /// 🔒 Required permissions: tribufu.identity.oauth2.authorize async fn authorize<'authorize_request>(&self, authorize_request: Option) -> Result<(), Error> { let local_var_configuration = &self.configuration; diff --git a/src/lib.rs b/src/lib.rs index edc482e..b0d81a9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,10 +1,111 @@ +// Copyright (c) Tribufu. All Rights Reserved. +// SPDX-License-Identifier: MIT + #![allow(unused_imports)] #![allow(clippy::too_many_arguments)] -extern crate serde_repr; -extern crate serde; -extern crate serde_json; -extern crate url; +use crate::apis::configuration::{ApiKey, Configuration}; +use crate::apis::tribufu_generated_api::TribufuGeneratedApiClient; +use reqwest::Client; +use std::env::{self, consts}; +use std::sync::Arc; pub mod apis; pub mod models; + +/// Use this to interact with the Tribufu API. +pub struct TribufuApi; + +impl TribufuApi { + /// The default base URL for the Tribufu API. + pub const DEFAULT_BASE_URL: &'static str = "https://api.tribufu.com"; + + /// Create a TribufuApi instance. + pub fn new(api_key: Option) -> TribufuGeneratedApiClient { + let configuration = Self::create_configuration(api_key); + let configuration_arc = Arc::new(configuration); + TribufuGeneratedApiClient::new(configuration_arc) + } + + /// Create a TribufuApi with the default options. + pub fn default() -> TribufuGeneratedApiClient { + Self::new(None) + } + + /// Create a TribufuApi with the given API key. + /// + /// An API key gives you public read only access to the Tribufu API. + pub fn with_api_key(api_key: String) -> TribufuGeneratedApiClient { + Self::new(Some(api_key)) + } + + /// Try to create a TribufuApi from environment variables. + /// + /// This will only work if the environment variables are set. + pub fn from_env(prefix: Option<&str>) -> Option { + let prefix = prefix.unwrap_or("TRIBUFU"); + let api_key_var = format!("{}_API_KEY", prefix); + if let Ok(api_key) = env::var(api_key_var) { + if !api_key.trim().is_empty() { + return Some(Self::with_api_key(api_key)); + } + } + None + } + + /// Create a TribufuApi from environment variables or the default API. + /// + /// This will fallback to the default API if the environment variables are not set. + pub fn from_env_or_default(prefix: Option<&str>) -> TribufuGeneratedApiClient { + Self::from_env(prefix).unwrap_or_else(Self::default) + } + + /// Gets the version of the Tribufu API client. + pub fn get_version() -> String { + env!("CARGO_PKG_VERSION").to_owned() + } + + /// Gets the user agent string for the Tribufu API client. + pub fn get_user_agent() -> String { + let version = Self::get_version(); + format!("Tribufu/{} ({}; {})", version, consts::OS, consts::ARCH) + } + + /// Checks if debug mode is enabled. + pub fn debug_enabled() -> bool { + cfg!(debug_assertions) + } + + /// Get the base URL for the Tribufu API. + fn get_base_url() -> String { + if let Ok(base_url) = env::var("TRIBUFU_API_URL") { + if Self::debug_enabled() && !base_url.trim().is_empty() { + return base_url; + } + } + + Self::DEFAULT_BASE_URL.to_string() + } + + /// Creates a configuration for the Tribufu API client. + fn create_configuration(api_key: Option) -> Configuration { + let base_path = Self::get_base_url(); + let user_agent = Some(Self::get_user_agent()); + + let api_key_obj = if let Some(api_key) = api_key { + Some(ApiKey { + prefix: Some("ApiKey".to_owned()), + key: api_key, + }) + } else { + None + }; + + Configuration { + base_path, + user_agent, + api_key: api_key_obj, + ..Default::default() + } + } +}