MCPcopy Create free account
hub / github.com/aiscriptdev/aiscript / validate_field

Method validate_field

aiscript-runtime/src/endpoint.rs:102–187  ·  view source on GitHub ↗
(field: &Field, value: &Value)

Source from the content-addressed store, hash-verified

100 }
101
102 fn validate_field(field: &Field, value: &Value) -> Result<Value, ServerError> {
103 // Try to convert the value if it doesn't match the expected type
104 let converted_value = match (field.field_type, value) {
105 // Already correct types
106 (FieldType::Str, Value::String(_))
107 | (FieldType::Number, Value::Number(_))
108 | (FieldType::Bool, Value::Bool(_))
109 | (FieldType::Array, Value::Array(_)) => value.clone(),
110
111 // Convert string to number
112 (FieldType::Number, Value::String(s)) => {
113 // Try parsing as integer first
114 if let Ok(n) = s.parse::<i64>() {
115 Value::Number(serde_json::Number::from(n))
116 }
117 // Then try as floating point
118 else if let Ok(f) = s.parse::<f64>() {
119 match serde_json::Number::from_f64(f) {
120 Some(n) => Value::Number(n),
121 None => {
122 return Err(ServerError::TypeMismatch {
123 field: field.name.clone(),
124 expected: field.field_type.as_str(),
125 });
126 }
127 }
128 }
129 // Cannot parse as number
130 else {
131 return Err(ServerError::TypeMismatch {
132 field: field.name.clone(),
133 expected: field.field_type.as_str(),
134 });
135 }
136 }
137
138 // Convert string to boolean
139 (FieldType::Bool, Value::String(s)) => match s.to_lowercase().as_str() {
140 "true" /*| "yes" | "1" | "on"*/ => Value::Bool(true),
141 "false" /*| "no" | "0" | "off"*/ => Value::Bool(false),
142 _ => {
143 return Err(ServerError::TypeMismatch {
144 field: field.name.clone(),
145 expected: field.field_type.as_str(),
146 })
147 }
148 },
149
150 // Convert number to boolean (0 = false, non-zero = true)
151 (FieldType::Bool, Value::Number(n)) => {
152 if n.as_f64().unwrap_or(0.0) == 0.0 {
153 Value::Bool(false)
154 } else {
155 Value::Bool(true)
156 }
157 }
158
159 // Convert number to string

Callers

nothing calls this directly

Calls 3

cloneMethod · 0.45
as_strMethod · 0.45
validateMethod · 0.45

Tested by

no test coverage detected