From 39c5d2f8969f1fde5dbac76bc2115830d368e1ad Mon Sep 17 00:00:00 2001 From: William Brown Date: Tue, 26 Feb 2019 15:00:14 +1000 Subject: [PATCH] Added reference type to schema. No handling exists yet. --- src/lib/schema.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/lib/schema.rs b/src/lib/schema.rs index 9dece4125..239461637 100644 --- a/src/lib/schema.rs +++ b/src/lib/schema.rs @@ -71,6 +71,7 @@ pub enum SyntaxType { BOOLEAN, SYNTAX_ID, INDEX_ID, + REFERENCE_UUID, } impl TryFrom<&str> for SyntaxType { @@ -91,6 +92,8 @@ impl TryFrom<&str> for SyntaxType { Ok(SyntaxType::SYNTAX_ID) } else if value == "INDEX_ID" { Ok(SyntaxType::INDEX_ID) + } else if value == "REFERENCE_UUID" { + Ok(SyntaxType::REFERENCE_UUID) } else { Err(()) } @@ -168,6 +171,9 @@ impl SchemaAttribute { SyntaxType::SYNTAX_ID => self.validate_syntax(v), SyntaxType::INDEX_ID => self.validate_index(v), SyntaxType::UUID => self.validate_uuid(v), + // Syntaxwise, these are the same. + // Referential integrity is handled in plugins. + SyntaxType::REFERENCE_UUID => self.validate_uuid(v), SyntaxType::UTF8STRING_INSENSITIVE => self.validate_utf8string_insensitive(v), SyntaxType::UTF8STRING_PRINCIPAL => self.validate_principal(v), _ => Ok(()), @@ -205,6 +211,14 @@ impl SchemaAttribute { acc } }), + // This is the same as a UUID, refint is a plugin + SyntaxType::REFERENCE_UUID => ava.iter().fold(Ok(()), |acc, v| { + if acc.is_ok() { + self.validate_uuid(v) + } else { + acc + } + }), SyntaxType::INDEX_ID => ava.iter().fold(Ok(()), |acc, v| { if acc.is_ok() { self.validate_index(v) @@ -258,6 +272,7 @@ impl SchemaAttribute { SyntaxType::SYNTAX_ID => self.normalise_syntax(v), SyntaxType::INDEX_ID => self.normalise_index(v), SyntaxType::UUID => self.normalise_uuid(v), + SyntaxType::REFERENCE_UUID => self.normalise_uuid(v), SyntaxType::UTF8STRING_INSENSITIVE => self.normalise_utf8string_insensitive(v), SyntaxType::UTF8STRING_PRINCIPAL => self.normalise_principal(v), _ => v.clone(), @@ -689,7 +704,7 @@ impl SchemaInner { secret: false, multivalue: true, index: vec![IndexType::EQUALITY], - syntax: SyntaxType::UTF8STRING_INSENSITIVE, + syntax: SyntaxType::REFERENCE_UUID, }, ); // ssh_publickey // multi @@ -734,7 +749,7 @@ impl SchemaInner { secret: false, multivalue: true, index: vec![IndexType::EQUALITY], - syntax: SyntaxType::UTF8STRING_INSENSITIVE, + syntax: SyntaxType::REFERENCE_UUID, }, );