diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs index 64db29608cbe90b1fc3e2601f345642dbea7b1be..bdf9a9cb2b715ca4b6dc13ab5267ff845deac23b 100644 --- a/src/protocol/mod.rs +++ b/src/protocol/mod.rs @@ -272,8 +272,19 @@ impl ProtocolDescription { }, CTP::Input => if let Value::Input(_) = argument { true } else { false }, CTP::Output => if let Value::Output(_) = argument { true } else { false }, - CTP::Instance(_definition_id, _num_embedded) => { - todo!("implement full type checking on user-supplied arguments"); + CTP::Instance(definition_id, _num_embedded) => { + let definition = self.types.get_base_definition(definition_id).unwrap(); + match &definition.definition { + DefinedTypeVariant::Enum(definition) => { + if let Value::Enum(variant_value) = argument { + let is_valid = definition.variants.iter() + .any(|v| v.value == *variant_value); + return is_valid; + } + }, + _ => todo!("implement full type checking on user-supplied arguments"), + } + return false; }, }