Team Ai
Apppublic

devin15/cursor2api-rust

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
usage_check.rs92 linesDownload Raw Back to model
1use crate::chat::constant::AVAILABLE_MODELS;2use serde::{Deserialize, Serialize};3 4#[derive(Clone)]5pub enum UsageCheck {6    None,7    Default,8    All,9    Custom(Vec<&'static str>),10}11 12impl Default for UsageCheck {13    fn default() -> Self {14        Self::Default15    }16}17 18impl Serialize for UsageCheck {19    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>20    where21        S: serde::Serializer,22    {23        use serde::ser::SerializeStruct;24        let mut state = serializer.serialize_struct("UsageCheck", 1)?;25        match self {26            UsageCheck::None => {27                state.serialize_field("type", "none")?;28            }29            UsageCheck::Default => {30                state.serialize_field("type", "default")?;31            }32            UsageCheck::All => {33                state.serialize_field("type", "all")?;34            }35            UsageCheck::Custom(models) => {36                state.serialize_field("type", "list")?;37                state.serialize_field("content", &models.join(","))?;38            }39        }40        state.end()41    }42}43 44impl<'de> Deserialize<'de> for UsageCheck {45    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>46    where47        D: serde::Deserializer<'de>,48    {49        #[derive(Deserialize)]50        #[serde(tag = "type", content = "content")]51        enum UsageCheckHelper {52            #[serde(rename = "none")]53            None,54            #[serde(rename = "default")]55            Default,56            #[serde(rename = "all")]57            All,58            #[serde(rename = "list")]59            Custom(String),60        }61 62        let helper = UsageCheckHelper::deserialize(deserializer)?;63        Ok(match helper {64            UsageCheckHelper::None => UsageCheck::None,65            UsageCheckHelper::Default => UsageCheck::Default,66            UsageCheckHelper::All => UsageCheck::All,67            UsageCheckHelper::Custom(list) => {68                if list.is_empty() {69                    return Ok(UsageCheck::None);70                }71 72                let models: Vec<&'static str> = list73                    .split(',')74                    .filter_map(|model| {75                        let model = model.trim();76                        AVAILABLE_MODELS77                            .iter()78                            .find(|m| m.id == model)79                            .map(|m| m.id)80                    })81                    .collect();82 83                if models.is_empty() {84                    UsageCheck::None85                } else {86                    UsageCheck::Custom(models)87                }88            }89        })90    }91}92