mirror of
https://github.com/lldap/lldap.git
synced 2026-03-31 15:07:48 +01:00
app: Fix attribute type parsing
This commit is contained in:
committed by
nitnelave
parent
3c7e4c3dec
commit
363ef106e2
@@ -55,6 +55,11 @@ features = [
|
||||
"wasmbind"
|
||||
]
|
||||
|
||||
[dependencies.derive_more]
|
||||
features = ["debug", "display", "from", "from_str"]
|
||||
default-features = false
|
||||
version = "1"
|
||||
|
||||
[dependencies.lldap_auth]
|
||||
path = "../crates/auth"
|
||||
features = [ "opaque_client" ]
|
||||
@@ -73,6 +78,10 @@ version = "0.24"
|
||||
[dependencies.serde]
|
||||
workspace = true
|
||||
|
||||
[dependencies.strum]
|
||||
features = ["derive"]
|
||||
version = "0.25"
|
||||
|
||||
[dependencies.yew_form]
|
||||
git = "https://github.com/jfbilodeau/yew_form"
|
||||
rev = "4b9fabffb63393ec7626a4477fd36de12a07fac9"
|
||||
|
||||
@@ -69,7 +69,7 @@ impl CommonComponent<CreateGroupAttributeForm> for CreateGroupAttributeForm {
|
||||
);
|
||||
})?;
|
||||
let attribute_type =
|
||||
serde_json::from_str::<AttributeType>(&model.attribute_type).unwrap();
|
||||
AttributeType::try_from(model.attribute_type.as_str()).unwrap();
|
||||
let req = create_group_attribute::Variables {
|
||||
name: model.attribute_name,
|
||||
attribute_type,
|
||||
@@ -144,7 +144,7 @@ impl Component for CreateGroupAttributeForm {
|
||||
oninput={link.callback(|_| Msg::Update)}>
|
||||
<option selected=true value="String">{"String"}</option>
|
||||
<option value="Integer">{"Integer"}</option>
|
||||
<option value="Jpeg">{"Jpeg"}</option>
|
||||
<option value="JpegPhoto">{"Jpeg"}</option>
|
||||
<option value="DateTime">{"DateTime"}</option>
|
||||
</Select<CreateGroupAttributeModel>>
|
||||
<CheckBox<CreateGroupAttributeModel>
|
||||
|
||||
@@ -73,7 +73,7 @@ impl CommonComponent<CreateUserAttributeForm> for CreateUserAttributeForm {
|
||||
);
|
||||
})?;
|
||||
let attribute_type =
|
||||
serde_json::from_str::<AttributeType>(&model.attribute_type).unwrap();
|
||||
AttributeType::try_from(model.attribute_type.as_str()).unwrap();
|
||||
let req = create_user_attribute::Variables {
|
||||
name: model.attribute_name,
|
||||
attribute_type,
|
||||
@@ -146,7 +146,7 @@ impl Component for CreateUserAttributeForm {
|
||||
oninput={link.callback(|_| Msg::Update)}>
|
||||
<option selected=true value="String">{"String"}</option>
|
||||
<option value="Integer">{"Integer"}</option>
|
||||
<option value="Jpeg">{"Jpeg"}</option>
|
||||
<option value="JpegPhoto">{"Jpeg"}</option>
|
||||
<option value="DateTime">{"DateTime"}</option>
|
||||
</Select<CreateUserAttributeModel>>
|
||||
<CheckBox<CreateUserAttributeModel>
|
||||
|
||||
+27
-9
@@ -1,24 +1,42 @@
|
||||
use derive_more::Display;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::fmt::Display;
|
||||
use strum::EnumString;
|
||||
use validator::ValidationError;
|
||||
|
||||
#[derive(Deserialize, Serialize, Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
||||
#[derive(Serialize, Deserialize, Debug, Copy, Clone, PartialEq, Eq, Hash, EnumString, Display)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
#[strum(ascii_case_insensitive)]
|
||||
pub(crate) enum AttributeType {
|
||||
String,
|
||||
Integer,
|
||||
#[strum(serialize = "DATE_TIME", serialize = "DATETIME")]
|
||||
DateTime,
|
||||
#[strum(serialize = "JPEG_PHOTO", serialize = "JPEGPHOTO")]
|
||||
JpegPhoto,
|
||||
}
|
||||
|
||||
impl Display for AttributeType {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "{:?}", self)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn validate_attribute_type(attribute_type: &str) -> Result<(), ValidationError> {
|
||||
serde_json::from_str::<AttributeType>(attribute_type)
|
||||
AttributeType::try_from(attribute_type)
|
||||
.map_err(|_| ValidationError::new("Invalid attribute type"))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_deserialize_attribute_type() {
|
||||
let attr_type: AttributeType = "STRING".try_into().unwrap();
|
||||
assert_eq!(attr_type, AttributeType::String);
|
||||
|
||||
let attr_type: AttributeType = "Integer".try_into().unwrap();
|
||||
assert_eq!(attr_type, AttributeType::Integer);
|
||||
|
||||
let attr_type: AttributeType = "DATE_TIME".try_into().unwrap();
|
||||
assert_eq!(attr_type, AttributeType::DateTime);
|
||||
|
||||
let attr_type: AttributeType = "JpegPhoto".try_into().unwrap();
|
||||
assert_eq!(attr_type, AttributeType::JpegPhoto);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user