Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion lang/syn/src/idl/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@ pub fn gen_idl_print_fn_error(error: &Error) -> TokenStream {
"__anchor_private_print_idl_error_{}",
error.ident.to_string().to_snake_case()
);
let offset = match &error.args {
Some(args) => {
let offset = &args.offset;
quote! { #offset }
}
None => quote! { ::anchor_lang::error::ERROR_CODE_OFFSET },
};

let error_codes = error
.codes
Expand All @@ -26,7 +33,7 @@ pub fn gen_idl_print_fn_error(error: &Error) -> TokenStream {

quote! {
#idl::IdlErrorCode {
code: anchor_lang::error::ERROR_CODE_OFFSET + #id,
code: #offset + #id,
name: #name.into(),
msg: #msg,
}
Expand Down
5 changes: 2 additions & 3 deletions lang/syn/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -680,9 +680,8 @@ impl Parse for ErrorArgs {
return Err(ParseError::new(offset_span, "expected keyword offset"));
}
stream.parse::<Token![=]>()?;
Ok(ErrorArgs {
offset: stream.parse()?,
})
let offset: LitInt = stream.parse()?;
Ok(ErrorArgs { offset })
}
}

Expand Down
10 changes: 7 additions & 3 deletions tests/idl/idls/new.json
Original file line number Diff line number Diff line change
Expand Up @@ -413,18 +413,22 @@
],
"errors": [
{
"code": 6000,
"code": 500000,
"name": "SomeError",
"msg": "Example error."
},
{
"code": 6001,
"code": 500001,
"name": "OtherError",
"msg": "Another error."
},
{
"code": 6002,
"code": 500002,
"name": "ErrorWithoutMsg"
},
{
"code": 500500,
"name": "WithDiscrim"
}
],
"types": [
Expand Down
3 changes: 2 additions & 1 deletion tests/idl/programs/idl/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -300,13 +300,14 @@ pub struct Initialize2<'info> {
#[derive(Accounts)]
pub struct CauseError {}

#[error_code]
#[error_code(offset = 500_000)]
pub enum ErrorCode {
#[msg("Example error.")]
SomeError,
#[msg("Another error.")]
OtherError,
ErrorWithoutMsg,
WithDiscrim = 500,
}

mod some_other_module {
Expand Down