A better Rust ATProto crate
at main 85 lines 2.4 kB view raw
1use jacquard_lexicon::lexicon::LexStringFormat; 2use jacquard_lexicon::schema::builder::LexiconDocBuilder; 3 4#[test] 5fn test_builder_simple_record() { 6 let doc = LexiconDocBuilder::new("app.example.test") 7 .description("Test record") 8 .record() 9 .key("tid") 10 .field("text", |f| f.string().max_length(1000).required().build()) 11 .field("createdAt", |f| { 12 f.string() 13 .format(LexStringFormat::Datetime) 14 .required() 15 .build() 16 }) 17 .build() 18 .build(); 19 20 assert_eq!(doc.id.as_ref(), "app.example.test"); 21 assert_eq!(doc.defs.len(), 1); 22 23 // Serialize and verify 24 let json = serde_json::to_string_pretty(&doc).unwrap(); 25 println!("{}", json); 26 27 assert!(json.contains("\"type\": \"record\"")); 28 assert!(json.contains("\"maxLength\": 1000")); 29} 30 31#[test] 32fn test_builder_query() { 33 let doc = LexiconDocBuilder::new("app.example.getPost") 34 .description("Get a post") 35 .query() 36 .description("Retrieve a post by URI") 37 .param_string("uri", true) 38 .build() 39 .build(); 40 41 assert_eq!(doc.id.as_ref(), "app.example.getPost"); 42 assert_eq!(doc.defs.len(), 1); 43 44 let json = serde_json::to_string_pretty(&doc).unwrap(); 45 println!("{}", json); 46 47 assert!(json.contains("\"type\": \"query\"")); 48} 49 50#[test] 51fn test_builder_object_with_ref() { 52 let doc = LexiconDocBuilder::new("app.example.types") 53 .object("post") 54 .field("uri", |f| { 55 f.string().format(LexStringFormat::AtUri).required().build() 56 }) 57 .field("author", |f| f.ref_to("app.bsky.actor.defs#profileView")) 58 .build() 59 .build(); 60 61 assert_eq!(doc.id.as_ref(), "app.example.types"); 62 assert_eq!(doc.defs.len(), 1); 63 64 let json = serde_json::to_string_pretty(&doc).unwrap(); 65 println!("{}", json); 66 67 assert!(json.contains("\"type\": \"ref\"")); 68 assert!(json.contains("app.bsky.actor.defs#profileView")); 69} 70 71#[test] 72fn test_builder_array_field() { 73 let doc = LexiconDocBuilder::new("app.example.list") 74 .record() 75 .field("items", |f| f.array(|a| a.string_items().max_length(100))) 76 .build() 77 .build(); 78 79 assert_eq!(doc.id.as_ref(), "app.example.list"); 80 81 let json = serde_json::to_string_pretty(&doc).unwrap(); 82 println!("{}", json); 83 84 assert!(json.contains("\"type\": \"array\"")); 85}