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}