deta_rust_sdk/
lib.rs

1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum DetaError {
5    #[error("Invalid project key")]
6    InvalidProjectKey,
7}
8
9#[derive(Debug)]
10pub struct Deta {
11    project_id: String,
12    project_key: String,
13}
14
15impl Deta {
16    pub fn new(project_key: String) -> Result<Self, DetaError> {
17        let project_id = get_project_id(project_key.clone())?;
18        Ok(Self {
19            project_id,
20            project_key,
21        })
22    }
23}
24
25fn get_project_id(project_key: String) -> Result<String, DetaError> {
26    let parts = project_key.split('_').collect::<Vec<&str>>();
27    if parts.len() != 2 {
28        return Err(DetaError::InvalidProjectKey);
29    }
30    Ok(parts[0].to_string())
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36
37    #[test]
38    fn test_new_deta() {
39        let project_key = "1234_abc".to_string();
40        let deta = Deta::new(project_key);
41        assert!(deta.is_ok());
42        let deta = deta.unwrap();
43        assert_eq!(deta.project_id, "1234");
44        assert_eq!(deta.project_key, "1234_abc");
45    }
46
47    #[test]
48    fn test_new_deta_with_incorrect_key() {
49        let project_key = "1234".to_string();
50        let deta = Deta::new(project_key);
51        assert!(deta.is_err());
52    }
53}