From 0280f02bc0d211a3eba1159ea9bf9293de47a3c5 Mon Sep 17 00:00:00 2001 From: "Philip (a-0)" <@ph:a-0.me> Date: Sun, 2 Jul 2023 21:59:24 +0200 Subject: [PATCH] Added more types --- src/v1/schemas/created_event.rs | 11 +++++ src/v1/schemas/event_id.rs | 6 +++ src/v1/schemas/event_list.rs | 24 ++++++++++ src/v1/schemas/event_rest_search_list.rs | 12 +++++ src/v1/schemas/extended_event.rs | 11 +++++ src/v1/schemas/extended_event_list.rs | 24 ++++++++++ src/v1/schemas/mod.rs | 16 +++++++ src/v1/schemas/nullable_object_relation.rs | 49 ++++++++++++++++++++ src/v1/schemas/object.rs | 11 +++++ src/v1/schemas/object_description.rs | 24 ++++++++++ src/v1/schemas/object_id.rs | 52 ++++++++++++++++++++++ src/v1/schemas/object_meta_category.rs | 24 ++++++++++ src/v1/schemas/object_name.rs | 44 ++++++++++++++++++ src/v1/schemas/object_relation.rs | 37 +++++++++++++++ src/v1/schemas/object_template_version.rs | 52 ++++++++++++++++++++++ src/v1/schemas/slim_event.rs | 11 +++++ src/v1/schemas/slim_event_list.rs | 24 ++++++++++ src/v1/schemas/updated_event.rs | 11 +++++ 18 files changed, 443 insertions(+) create mode 100644 src/v1/schemas/created_event.rs create mode 100644 src/v1/schemas/event_list.rs create mode 100644 src/v1/schemas/event_rest_search_list.rs create mode 100644 src/v1/schemas/extended_event.rs create mode 100644 src/v1/schemas/extended_event_list.rs create mode 100644 src/v1/schemas/nullable_object_relation.rs create mode 100644 src/v1/schemas/object.rs create mode 100644 src/v1/schemas/object_description.rs create mode 100644 src/v1/schemas/object_id.rs create mode 100644 src/v1/schemas/object_meta_category.rs create mode 100644 src/v1/schemas/object_name.rs create mode 100644 src/v1/schemas/object_relation.rs create mode 100644 src/v1/schemas/object_template_version.rs create mode 100644 src/v1/schemas/slim_event.rs create mode 100644 src/v1/schemas/slim_event_list.rs create mode 100644 src/v1/schemas/updated_event.rs diff --git a/src/v1/schemas/created_event.rs b/src/v1/schemas/created_event.rs new file mode 100644 index 0000000..07eca91 --- /dev/null +++ b/src/v1/schemas/created_event.rs @@ -0,0 +1,11 @@ + +default_derive!{ + pub struct CreatedEvent { + //TODO + } +} + +#[test] +fn valid1() { + todo!() +} \ No newline at end of file diff --git a/src/v1/schemas/event_id.rs b/src/v1/schemas/event_id.rs index f2dfedc..554a20c 100644 --- a/src/v1/schemas/event_id.rs +++ b/src/v1/schemas/event_id.rs @@ -39,6 +39,12 @@ fn oversized() { assert!(id.is_err()) } +#[test] +fn forbidden_char() { + let id: Result = "1954a".try_into(); + assert!(id.is_err()) +} + #[test] fn valid1() { let id: Result = "12345".try_into(); diff --git a/src/v1/schemas/event_list.rs b/src/v1/schemas/event_list.rs new file mode 100644 index 0000000..4a7190b --- /dev/null +++ b/src/v1/schemas/event_list.rs @@ -0,0 +1,24 @@ +use super::Event; + +default_derive!{ + pub struct EventList { + events: Vec + } +} + +impl From> for EventList { + fn from(value: Vec) -> Self { + EventList { events: value } + } +} + +impl Into> for EventList { + fn into(self) -> Vec { + self.events + } +} + +#[test] +fn valid1() { + todo!() +} \ No newline at end of file diff --git a/src/v1/schemas/event_rest_search_list.rs b/src/v1/schemas/event_rest_search_list.rs new file mode 100644 index 0000000..81d204f --- /dev/null +++ b/src/v1/schemas/event_rest_search_list.rs @@ -0,0 +1,12 @@ + +default_derive!{ + pub struct EventRestSearchList { + //TODO + } +} + + +#[test] +fn valid1() { + todo!() +} \ No newline at end of file diff --git a/src/v1/schemas/extended_event.rs b/src/v1/schemas/extended_event.rs new file mode 100644 index 0000000..510eaa0 --- /dev/null +++ b/src/v1/schemas/extended_event.rs @@ -0,0 +1,11 @@ + +default_derive!{ + pub struct ExtendedEvent { + //TODO + } +} + +#[test] +fn valid1() { + todo!() +} \ No newline at end of file diff --git a/src/v1/schemas/extended_event_list.rs b/src/v1/schemas/extended_event_list.rs new file mode 100644 index 0000000..4cc9ef2 --- /dev/null +++ b/src/v1/schemas/extended_event_list.rs @@ -0,0 +1,24 @@ +use super::{ExtendedEvent}; + +default_derive!{ + pub struct ExtendedEventList { + events: Vec + } +} + +impl From> for ExtendedEventList { + fn from(value: Vec) -> Self { + ExtendedEventList { events: value } + } +} + +impl Into> for ExtendedEventList { + fn into(self) -> Vec { + self.events + } +} + +#[test] +fn valid1() { + todo!() +} \ No newline at end of file diff --git a/src/v1/schemas/mod.rs b/src/v1/schemas/mod.rs index 01b5296..70062cf 100644 --- a/src/v1/schemas/mod.rs +++ b/src/v1/schemas/mod.rs @@ -14,6 +14,7 @@ expose_submodules!( attribute_type, attribute_value, attribute, + created_event, decay_score_list, decay_score, decaying_model_parameters, @@ -22,15 +23,30 @@ expose_submodules!( event_attribute_count, event_id, event_info, + event_list, event_no_id, event_organisation, event_proposal_email_lock, event_report, + event_rest_search_list, event_tag_id, event_tag_list, event_tag, event, extended_attribute, + extended_event_list, + extended_event, full_decaying_model, + nullable_object_relation, + object_description, + object_id, + object_meta_category, + object_name, + object_relation, + object_template_version, + object, + slim_event_list, + slim_event, + updated_event, uuid ); \ No newline at end of file diff --git a/src/v1/schemas/nullable_object_relation.rs b/src/v1/schemas/nullable_object_relation.rs new file mode 100644 index 0000000..3afa888 --- /dev/null +++ b/src/v1/schemas/nullable_object_relation.rs @@ -0,0 +1,49 @@ + +default_derive!{ + pub struct NullableObjectRelation { + rel: Option + } +} + +impl TryFrom<&str> for NullableObjectRelation { + type Error = &'static str; + + fn try_from(value: &str) -> Result { + if value == "null" { //TODO how is null represented in OpenAPI or actual JSON? len()==0? + Ok(NullableObjectRelation { rel: None }) + } + else if value.len() <= 255 { + Ok(NullableObjectRelation { rel: Some(value.to_string()) }) + } + else { + Err("Failed to parse NullableObjectRelation") + } + } +} + +impl Into for NullableObjectRelation { + fn into(self) -> String { + match self.rel { + Some(r) => r, + None => "null".to_string() + } + } +} + +#[test] +fn oversized() { + let rel: Result = format!("{:>256}", "Test").as_str().try_into(); + assert!(rel.is_err()) +} + +#[test] +fn valid1() { + let rel: Result = "relation".try_into(); + assert_eq!(rel, Ok(NullableObjectRelation { rel: Some("relation".to_string()) })) +} + +#[test] +fn valid2() { + let rel: Result = "null".try_into(); + assert_eq!(rel, Ok(NullableObjectRelation { rel: None })) +} \ No newline at end of file diff --git a/src/v1/schemas/object.rs b/src/v1/schemas/object.rs new file mode 100644 index 0000000..c8233f9 --- /dev/null +++ b/src/v1/schemas/object.rs @@ -0,0 +1,11 @@ + +default_derive!{ + pub struct Object { + //TODO + } +} + +#[test] +fn valid1() { + todo!() +} \ No newline at end of file diff --git a/src/v1/schemas/object_description.rs b/src/v1/schemas/object_description.rs new file mode 100644 index 0000000..4fa3a48 --- /dev/null +++ b/src/v1/schemas/object_description.rs @@ -0,0 +1,24 @@ + +default_derive!{ + pub struct ObjectDescription { + text: String + } +} + +impl From<&str> for ObjectDescription { + fn from(value: &str) -> Self { + ObjectDescription { text: value.to_string() } + } +} + +impl Into for ObjectDescription { + fn into(self) -> String { + self.text + } +} + + +#[test] +fn valid() { + assert!(true) // no constraints defined +} \ No newline at end of file diff --git a/src/v1/schemas/object_id.rs b/src/v1/schemas/object_id.rs new file mode 100644 index 0000000..f805fb1 --- /dev/null +++ b/src/v1/schemas/object_id.rs @@ -0,0 +1,52 @@ +use regex_macro::regex; + + +default_derive!{ + pub struct ObjectId { + id: String, + } +} + +impl TryFrom<&str> for ObjectId { + type Error = &'static str; + + fn try_from(value: &str) -> Result { + let re = regex!("^[[:digit:]]+$"); + if value.len() <= 10 && re.is_match(value) { + Ok(ObjectId { id: value.to_string() }) + } + else { + Err("Failed to parse ObjectId") + } + } +} + +impl Into for ObjectId { + fn into(self) -> String { + self.id + } +} + +#[test] +fn empty() { + let id: Result = "".try_into(); + assert!(id.is_err()) +} + +#[test] +fn oversized() { + let id: Result = "12345678910".try_into(); + assert!(id.is_err()) +} + +#[test] +fn valid1() { + let id: Result = "12345".try_into(); + assert_eq!(id, Ok(ObjectId { id: "12345".to_string() })) +} + +#[test] +fn valid2() { + let id: Result = "0123456789".try_into(); + assert_eq!(id, Ok(ObjectId { id: "0123456789".to_string() })) +} \ No newline at end of file diff --git a/src/v1/schemas/object_meta_category.rs b/src/v1/schemas/object_meta_category.rs new file mode 100644 index 0000000..99f5904 --- /dev/null +++ b/src/v1/schemas/object_meta_category.rs @@ -0,0 +1,24 @@ + +default_derive!{ + pub struct ObjectMetaCategory { + cat: String + } +} + +impl From<&str> for ObjectMetaCategory { + fn from(value: &str) -> Self { + ObjectMetaCategory { cat: value.to_string() } + } +} + +impl Into for ObjectMetaCategory { + fn into(self) -> String { + self.cat + } +} + + +#[test] +fn valid() { + assert!(true) // no constraints defined +} \ No newline at end of file diff --git a/src/v1/schemas/object_name.rs b/src/v1/schemas/object_name.rs new file mode 100644 index 0000000..360e5b7 --- /dev/null +++ b/src/v1/schemas/object_name.rs @@ -0,0 +1,44 @@ + +default_derive!{ + pub struct ObjectName { + name: String + } +} + +impl TryFrom<&str> for ObjectName { + type Error = &'static str; + + fn try_from(value: &str) -> Result { + if value.len() <= 131071 { + Ok(ObjectName { name: value.to_string() }) + } + else { + Err("Failed to parse ObjectName") + } + } +} + +impl Into for ObjectName { + fn into(self) -> String { + self.name + } +} + + +#[test] +fn oversized() { + let comment: Result = format!("{:>131072}", "Test").as_str().try_into(); + assert!(comment.is_err()) +} + +#[test] +fn valid1() { + let comment: Result = "".try_into(); + assert_eq!(comment, Ok(ObjectName { name: "".to_string() })) +} + +#[test] +fn valid2() { + let comment: Result = "Name".try_into(); + assert_eq!(comment, Ok(ObjectName{name: String::from("Name")})) +} \ No newline at end of file diff --git a/src/v1/schemas/object_relation.rs b/src/v1/schemas/object_relation.rs new file mode 100644 index 0000000..c56bad0 --- /dev/null +++ b/src/v1/schemas/object_relation.rs @@ -0,0 +1,37 @@ + +default_derive!{ + pub struct ObjectRelation { + rel: String + } +} + +impl TryFrom<&str> for ObjectRelation { + type Error = &'static str; + + fn try_from(value: &str) -> Result { + if value.len() <= 255 { + Ok(ObjectRelation { rel: value.to_string() }) + } + else { + Err("Failed to parse ObjectRelation") + } + } +} + +impl Into for ObjectRelation { + fn into(self) -> String { + self.rel + } +} + +#[test] +fn oversized() { + let rel: Result = format!("{:>256}", "Test").as_str().try_into(); + assert!(rel.is_err()) +} + +#[test] +fn valid1() { + let rel: Result = "relation".try_into(); + assert_eq!(rel, Ok(ObjectRelation { rel: "relation".to_string() })) +} \ No newline at end of file diff --git a/src/v1/schemas/object_template_version.rs b/src/v1/schemas/object_template_version.rs new file mode 100644 index 0000000..90c028a --- /dev/null +++ b/src/v1/schemas/object_template_version.rs @@ -0,0 +1,52 @@ +use regex_macro::regex; + + +default_derive!{ + pub struct ObjectTemplateVersion { + version: String, + } +} + +impl TryFrom<&str> for ObjectTemplateVersion { + type Error = &'static str; + + fn try_from(value: &str) -> Result { + let re = regex!("^[[:digit:]]+$"); + if re.is_match(value) { + Ok(ObjectTemplateVersion { version: value.to_string() }) + } + else { + Err("Failed to parse ObjectTemplateVersion") + } + } +} + +impl Into for ObjectTemplateVersion { + fn into(self) -> String { + self.version + } +} + +#[test] +fn empty() { + let id: Result = "".try_into(); + assert!(id.is_err()) +} + +#[test] +fn forbidden_char() { + let id: Result = "123a".try_into(); + assert!(id.is_err()) +} + +#[test] +fn valid1() { + let id: Result = "12345".try_into(); + assert_eq!(id, Ok(ObjectTemplateVersion { version: "12345".to_string() })) +} + +#[test] +fn valid2() { + let id: Result = "0123456789".try_into(); + assert_eq!(id, Ok(ObjectTemplateVersion { version: "0123456789".to_string() })) +} \ No newline at end of file diff --git a/src/v1/schemas/slim_event.rs b/src/v1/schemas/slim_event.rs new file mode 100644 index 0000000..0868d56 --- /dev/null +++ b/src/v1/schemas/slim_event.rs @@ -0,0 +1,11 @@ + +default_derive!{ + pub struct SlimEvent { + //TODO + } +} + +#[test] +fn valid1() { + todo!() +} \ No newline at end of file diff --git a/src/v1/schemas/slim_event_list.rs b/src/v1/schemas/slim_event_list.rs new file mode 100644 index 0000000..2ff3520 --- /dev/null +++ b/src/v1/schemas/slim_event_list.rs @@ -0,0 +1,24 @@ +use super::{SlimEvent}; + +default_derive!{ + pub struct SlimEventList { + events: Vec + } +} + +impl From> for SlimEventList { + fn from(value: Vec) -> Self { + SlimEventList { events: value } + } +} + +impl Into> for SlimEventList { + fn into(self) -> Vec { + self.events + } +} + +#[test] +fn valid1() { + todo!() +} \ No newline at end of file diff --git a/src/v1/schemas/updated_event.rs b/src/v1/schemas/updated_event.rs new file mode 100644 index 0000000..4432768 --- /dev/null +++ b/src/v1/schemas/updated_event.rs @@ -0,0 +1,11 @@ + +default_derive!{ + pub struct UpdatedEvent { + //TODO + } +} + +#[test] +fn valid1() { + todo!() +} \ No newline at end of file