devin15/cursor2api-rust
0
1use chrono::{DateTime, Local};2use serde::{Deserialize, Serialize};3 4#[derive(Serialize)]5#[serde(untagged)]6pub enum GetUserInfo {7 Usage(TokenProfile),8 Error { error: String },9}10 11#[derive(Serialize, Clone)]12pub struct TokenProfile {13 pub usage: UsageProfile,14 pub user: UserProfile,15 pub stripe: StripeProfile,16}17 18#[derive(Deserialize, Serialize, PartialEq, Clone)]19pub enum MembershipType {20 #[serde(rename = "free")]21 Free,22 #[serde(rename = "free_trial")]23 FreeTrial,24 #[serde(rename = "pro")]25 Pro,26 #[serde(rename = "enterprise")]27 Enterprise,28}29 30#[derive(Deserialize, Serialize, Clone)]31pub struct StripeProfile {32 #[serde(rename(deserialize = "membershipType"))]33 pub membership_type: MembershipType,34 #[serde(35 rename(deserialize = "paymentId"),36 default,37 skip_serializing_if = "Option::is_none"38 )]39 pub payment_id: Option<String>,40 #[serde(rename(deserialize = "daysRemainingOnTrial"))]41 pub days_remaining_on_trial: u32,42}43 44#[derive(Deserialize, Serialize, Clone)]45pub struct ModelUsage {46 #[serde(rename(deserialize = "numRequests", serialize = "requests"))]47 pub num_requests: u32,48 #[serde(49 rename(deserialize = "numRequestsTotal"),50 default,51 skip_serializing_if = "Option::is_none"52 )]53 pub requests_total: Option<u32>,54 #[serde(rename(deserialize = "numTokens", serialize = "tokens"))]55 pub num_tokens: u32,56 #[serde(57 rename(deserialize = "maxRequestUsage"),58 skip_serializing_if = "Option::is_none"59 )]60 pub max_requests: Option<u32>,61 #[serde(62 rename(deserialize = "maxTokenUsage"),63 skip_serializing_if = "Option::is_none"64 )]65 pub max_tokens: Option<u32>,66}67 68#[derive(Deserialize, Serialize, Clone)]69pub struct UsageProfile {70 #[serde(rename(deserialize = "gpt-4"))]71 pub premium: ModelUsage,72 #[serde(rename(deserialize = "gpt-3.5-turbo"))]73 pub standard: ModelUsage,74 #[serde(rename(deserialize = "gpt-4-32k"))]75 pub unknown: ModelUsage,76}77 78#[derive(Deserialize, Serialize, Clone)]79pub struct UserProfile {80 pub email: String,81 // pub email_verified: bool,82 pub name: String,83 #[serde(rename(serialize = "id"))]84 pub sub: String,85 pub updated_at: DateTime<Local>,86 // Image link, rendered in /logs?87 // pub picture: Option<String>,88}89 