diff options
Diffstat (limited to 'src/checker_signature.rs')
| -rw-r--r-- | src/checker_signature.rs | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/checker_signature.rs b/src/checker_signature.rs index 8fc982a..4fa723f 100644 --- a/src/checker_signature.rs +++ b/src/checker_signature.rs @@ -6,8 +6,25 @@ use tracing::instrument; impl CheckerState { #[instrument(skip(self), level = "debug", fields(%signature))] pub fn check_signature(&self, signature: Signature) -> Result<Signature, CheckerError> { - Err(CheckerError::Unimplemented( - "signature checking".to_string(), - )) + match signature { + Signature::Set => Ok(Signature::Set), + Signature::Var(v) => { + let deref = self.lookup_signature(&v)?; + Ok(deref.clone()) + } + Signature::Ext { params, codomain } => Err(CheckerError::Unimplemented( + "extension signatures".to_string(), + )), + Signature::Theory(fields) => { + let fields = fields + .into_iter() + .map(|SigField { signature, name }| { + let signature = self.check_signature(signature)?; + Ok(SigField { name, signature }) + }) + .collect::<Result<Vec<_>, _>>()?; + Ok(Signature::Theory(fields)) + } + } } } |
