1#![allow(clippy::used_underscore_binding)]
2use thiserror::Error;
3
4#[derive(Error, Debug)]
6pub enum DamlLfError {
7 #[error("failed to parse Daml LF: {0}")]
8 DamlLfParseError(#[from] prost::DecodeError),
9 #[error("failed to parse dar file: {0}")]
10 DarParseError(String),
11 #[error("failed to convert Daml LF: {0}")]
12 DamlLfConvertError(#[from] DamlLfConvertError),
13 #[error("io error: {0}")]
14 IoError(#[from] std::io::Error),
15 #[error("unknown Daml LF version: {0}")]
16 UnknownVersion(String),
17 #[error("unsupported Daml LF version: {0}")]
18 UnsupportedVersion(String),
19}
20
21impl DamlLfError {
22 pub fn new_dar_parse_error(error: impl Into<String>) -> Self {
23 DamlLfError::DarParseError(error.into())
24 }
25
26 pub fn new_unknown_version(version: impl Into<String>) -> Self {
27 DamlLfError::UnknownVersion(version.into())
28 }
29
30 pub fn new_unsupported_version(version: impl Into<String>) -> Self {
31 DamlLfError::UnsupportedVersion(version.into())
32 }
33}
34
35impl From<yaml_rust::scanner::ScanError> for DamlLfError {
36 fn from(e: yaml_rust::scanner::ScanError) -> Self {
37 DamlLfError::DarParseError(e.to_string())
38 }
39}
40
41impl From<zip::result::ZipError> for DamlLfError {
42 fn from(e: zip::result::ZipError) -> Self {
43 DamlLfError::DarParseError(e.to_string())
44 }
45}
46
47pub type DamlLfResult<T> = Result<T, DamlLfError>;
49
50#[derive(Debug, Error)]
52pub enum DamlLfConvertError {
53 #[error("unexpected contract id type arguments")]
55 UnexpectedContractIdTypeArguments,
56 #[error("required field was not supplied")]
58 MissingRequiredField,
59 #[error("the type {0} is not currently supported")]
61 UnsupportedType(String),
62 #[error("choice argument was not a record")]
64 UnexpectedChoiceData,
65 #[error("Daml LF version {0} supports feature {1} but was not used (supported as of version {2})")]
67 SupportedFeatureUnused(String, String, String),
68 #[error("Daml LF version {0} does not support feature {1} (requires version {2})")]
70 UnsupportedFeatureUsed(String, String, String),
71 #[error("unexpected DamlDataPayload variant")]
73 UnexpectedData,
74 #[error("expected type {0} but found type {1}")]
76 UnexpectedType(String, String),
77 #[error("failed to lookup a DamlPackagePayload with id {0}")]
79 UnknownPackage(String),
80 #[error("failed to lookup a DamlModulePayload with id {0}")]
82 UnknownModule(String),
83 #[error("failed to lookup a DamlDataPayload with id {0}")]
85 UnknownData(String),
86 #[error("unknown PrimCon enum variant {0}")]
88 UnknownPrimCon(i32),
89 #[error("unknown BuiltinFunction enum variant {0}")]
91 UnknownBuiltinFunction(i32),
92 #[error("unknown RoundingMode enum variant {0}")]
94 UnknownRoundingMode(i32),
95 #[error("Nat {0} out of range (0..37 inclusive)")]
97 NatOutOfRange(i64),
98 #[error("Internal error: {0}")]
100 InternalError(String),
101}
102
103pub type DamlLfConvertResult<T> = Result<T, DamlLfConvertError>;