use chrono::{DateTime, Local}; use serde::{Deserialize, Serialize}; #[derive(Serialize)] #[serde(untagged)] pub enum GetUserInfo { Usage(TokenProfile), Error { error: String }, } #[derive(Serialize, Clone)] pub struct TokenProfile { pub usage: UsageProfile, pub user: UserProfile, pub stripe: StripeProfile, } #[derive(Deserialize, Serialize, PartialEq, Clone)] pub enum MembershipType { #[serde(rename = "free")] Free, #[serde(rename = "free_trial")] FreeTrial, #[serde(rename = "pro")] Pro, #[serde(rename = "enterprise")] Enterprise, } #[derive(Deserialize, Serialize, Clone)] pub struct StripeProfile { #[serde(rename(deserialize = "membershipType"))] pub membership_type: MembershipType, #[serde( rename(deserialize = "paymentId"), default, skip_serializing_if = "Option::is_none" )] pub payment_id: Option, #[serde(rename(deserialize = "daysRemainingOnTrial"))] pub days_remaining_on_trial: u32, } #[derive(Deserialize, Serialize, Clone)] pub struct ModelUsage { #[serde(rename(deserialize = "numRequests", serialize = "requests"))] pub num_requests: u32, #[serde( rename(deserialize = "numRequestsTotal"), default, skip_serializing_if = "Option::is_none" )] pub requests_total: Option, #[serde(rename(deserialize = "numTokens", serialize = "tokens"))] pub num_tokens: u32, #[serde( rename(deserialize = "maxRequestUsage"), skip_serializing_if = "Option::is_none" )] pub max_requests: Option, #[serde( rename(deserialize = "maxTokenUsage"), skip_serializing_if = "Option::is_none" )] pub max_tokens: Option, } #[derive(Deserialize, Serialize, Clone)] pub struct UsageProfile { #[serde(rename(deserialize = "gpt-4"))] pub premium: ModelUsage, #[serde(rename(deserialize = "gpt-3.5-turbo"))] pub standard: ModelUsage, #[serde(rename(deserialize = "gpt-4-32k"))] pub unknown: ModelUsage, } #[derive(Deserialize, Serialize, Clone)] pub struct UserProfile { pub email: String, // pub email_verified: bool, pub name: String, #[serde(rename(serialize = "id"))] pub sub: String, pub updated_at: DateTime, // Image link, rendered in /logs? // pub picture: Option, }