Skip to content

Commit 8574dc8

Browse files
committed
fix : handle single ix without discriminator
1 parent cfb4a3f commit 8574dc8

File tree

8 files changed

+50
-45
lines changed

8 files changed

+50
-45
lines changed

packages/renderers-vixen-parser/e2e/anchor/src/generated/accounts_parser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
//! <https://github.com/codama-idl/codama>
66
//!
77
8-
use wen_transfer_guard_program_sdk::accounts::guardV1::Guardv1;
8+
use wen_transfer_guard_program_sdk::accounts::guard_v1::GuardV1;
99
use wen_transfer_guard_program_sdk::ID;
1010

1111
/// WenTransferGuard Program State

packages/renderers-vixen-parser/e2e/anchor/src/generated/instructions_parser.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ impl InstructionParser {
6767
let accounts_len = ix.accounts.len();
6868
let ix_discriminator: [u8; 8] = ix.data[0..8].try_into()?;
6969
let mut ix_data = &ix.data[8..];
70-
7170
match ix_discriminator {
7271
[251, 254, 17, 198, 219, 218, 154, 99] => {
7372
check_min_accounts_req(accounts_len, 8)?;

packages/renderers-vixen-parser/e2e/dummy/src/generated/instructions_parser.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ use dummy_program_sdk::ID;
1818
/// Dummy Instructions
1919
#[derive(Debug)]
2020
pub enum DummyProgramIx {
21-
Instruction1(Instruction1IxAccounts, Instruction1IxData),
22-
Instruction2(Instruction2IxAccounts, Instruction2IxData),
21+
Instruction1(Instruction1IxAccounts),
22+
Instruction2(Instruction2IxAccounts),
2323
Instruction3(Instruction3IxAccounts, Instruction3IxData),
2424
Instruction4(Instruction4IxAccounts, Instruction4IxData),
2525
Instruction5(Instruction5IxAccounts, Instruction5IxData),
26-
Instruction6(Instruction6IxAccounts, Instruction6IxData),
27-
Instruction7(Instruction7IxAccounts, Instruction7IxData),
26+
Instruction6(Instruction6IxAccounts),
27+
Instruction7(Instruction7IxAccounts),
2828
}
2929

3030
#[derive(Debug, Copy, Clone)]
@@ -71,7 +71,6 @@ impl InstructionParser {
7171
let accounts_len = ix.accounts.len();
7272
let ix_discriminator: [u8; 1] = ix.data[0..1].try_into()?;
7373
let mut ix_data = &ix.data[1..];
74-
7574
match ix_discriminator {
7675
[42] => {
7776
check_min_accounts_req(accounts_len, 0)?;

packages/renderers-vixen-parser/e2e/memo/src/generated/instructions_parser.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,10 @@ impl InstructionParser {
6161
let accounts_len = ix.accounts.len();
6262
let ix_discriminator: [u8; 1] = ix.data[0..1].try_into()?;
6363
let mut ix_data = &ix.data[1..];
64-
65-
match ix_discriminator {
66-
_ => Err(yellowstone_vixen_core::ParseError::from(
67-
"Invalid Instruction discriminator".to_owned(),
68-
)),
69-
}
64+
check_min_accounts_req(accounts_len, 0)?;
65+
let de_ix_data: AddMemoIxData = BorshDeserialize::deserialize(&mut ix_data)?;
66+
let ix_accounts = AddMemoIxAccounts {};
67+
Ok(MemoProgramIx::AddMemo(ix_accounts, de_ix_data))
7068
}
7169
}
7270

packages/renderers-vixen-parser/e2e/system/src/generated/instructions_parser.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ impl InstructionParser {
9696
let accounts_len = ix.accounts.len();
9797
let ix_discriminator: [u8; 1] = ix.data[0..1].try_into()?;
9898
let mut ix_data = &ix.data[1..];
99-
10099
match ix_discriminator {
101100
[0] => {
102101
check_min_accounts_req(accounts_len, 2)?;

packages/renderers-vixen-parser/public/templates/accountsParserPage.njk

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#[derive(Debug)]
1212
pub enum {{ programName | pascalCase }}ProgramState {
1313
{% for account in accounts %}
14-
{{ account.name | pascalCase }}({{ account.name | pascalCase }}),
14+
{{ account.name | pascalCase }}({{ account.name | pascalCase }}),
1515
{% endfor %}
1616
}
1717

@@ -20,16 +20,14 @@ impl {{ programName | pascalCase }}ProgramState {
2020
let data_len = data_bytes.len();
2121
match data_len {
2222
{% for account in accounts %}
23-
{{ account.name | pascalCase }}::LEN => Ok(
24-
{{ programName | pascalCase }}ProgramState::{{ account.name | pascalCase }}(
25-
{{ account.name | pascalCase }}::from_bytes(data_bytes)?
26-
)
27-
),
23+
{{ account.name | pascalCase }}::LEN => Ok(
24+
{{ programName | pascalCase }}ProgramState::{{ account.name | pascalCase }}(
25+
{{ account.name | pascalCase }}::from_bytes(data_bytes)?
26+
)
27+
),
2828
{% endfor %}
2929
_ => Err(yellowstone_vixen_core::ParseError::from("Invalid Account data length".to_owned())),
3030
}
31-
32-
3331
}
3432
}
3533

packages/renderers-vixen-parser/public/templates/instructionsParserPage.njk

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99
#[derive(Debug)]
1010
pub enum {{ programName | pascalCase }}ProgramIx {
1111
{% for instruction in instructions %}
12-
{{ instruction.name | pascalCase }}({{ instruction.name | pascalCase }}IxAccounts, {{ instruction.name | pascalCase }}IxData),
12+
{% if instruction.hasArgs %}
13+
{{ instruction.name | pascalCase }}({{ instruction.name | pascalCase }}IxAccounts, {{ instruction.name | pascalCase }}IxData),
14+
{% else %}
15+
{{ instruction.name | pascalCase }}({{ instruction.name | pascalCase }}IxAccounts),
16+
{% endif %}
1317
{% endfor %}
1418
}
1519

@@ -52,27 +56,34 @@ impl InstructionParser {
5256
let accounts_len = ix.accounts.len();
5357
let ix_discriminator:[u8; {{ IX_DATA_OFFSET }}] = ix.data[0..{{ IX_DATA_OFFSET }}].try_into()?;
5458
let mut ix_data = &ix.data[{{ IX_DATA_OFFSET }}..];
55-
56-
match ix_discriminator {
57-
{% for instruction in instructions %}
58-
{% if instruction.discriminator != null %}
59-
{{ instruction.discriminator }} => {
60-
check_min_accounts_req(accounts_len, {{ instruction.accounts | length }})?;
61-
let de_ix_data:{{ instruction.name | pascalCase }}IxData = BorshDeserialize::deserialize(&mut ix_data)?;
62-
let ix_accounts = {{ instruction.name | pascalCase }}IxAccounts{
63-
{% for account in instruction.accounts %}
64-
{{ account.name | snakeCase }}: ix.accounts[{{ account.index }}],
65-
{% endfor %}
66-
};
67-
Ok({{ programName | pascalCase }}ProgramIx::{{ instruction.name | pascalCase }}(ix_accounts, de_ix_data))
68-
69-
70-
},
71-
{% endif %}
72-
{% endfor %}
73-
_ => Err(yellowstone_vixen_core::ParseError::from("Invalid Instruction discriminator".to_owned())),
74-
}
75-
59+
{% if hasDiscriminator %}
60+
match ix_discriminator {
61+
{% for instruction in instructions %}
62+
{% if instruction.discriminator != null %}
63+
{{ instruction.discriminator }} => {
64+
check_min_accounts_req(accounts_len, {{ instruction.accounts | length }})?;
65+
let de_ix_data:{{ instruction.name | pascalCase }}IxData = BorshDeserialize::deserialize(&mut ix_data)?;
66+
let ix_accounts = {{ instruction.name | pascalCase }}IxAccounts{
67+
{% for account in instruction.accounts %}
68+
{{ account.name | snakeCase }}: ix.accounts[{{ account.index }}],
69+
{% endfor %}
70+
};
71+
Ok({{ programName | pascalCase }}ProgramIx::{{ instruction.name | pascalCase }}(ix_accounts, de_ix_data))
72+
},
73+
{% endif %}
74+
{% endfor %}
75+
_ => Err(yellowstone_vixen_core::ParseError::from("Invalid Instruction discriminator".to_owned())),
76+
}
77+
{% else %}
78+
check_min_accounts_req(accounts_len, {{ instructions[0].accounts | length }})?;
79+
let de_ix_data:{{ instructions[0].name | pascalCase }}IxData = BorshDeserialize::deserialize(&mut ix_data)?;
80+
let ix_accounts = {{ instructions[0].name | pascalCase }}IxAccounts{
81+
{% for account in instructions[0].accounts %}
82+
{{ account.name | snakeCase }}: ix.accounts[{{ account.index }}],
83+
{% endfor %}
84+
};
85+
Ok({{ programName | pascalCase }}ProgramIx::{{ instructions[0].name | pascalCase }}(ix_accounts, de_ix_data))
86+
{% endif %}
7687
}
7788

7889
}

packages/renderers-vixen-parser/src/getRenderMapVisitor.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
115115

116116
accounts.forEach(acc => {
117117
accountParserImports.add(
118-
`${codamaSdkName}::accounts::{${acc.name}::${toPascalCase(acc.name)}}`,
118+
`${codamaSdkName}::accounts::{${toSnakeCase(acc.name)}::${fromCamelToPascalCase(acc.name)}}`,
119119
);
120120
});
121121

@@ -151,6 +151,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
151151
imports: instructionParserImports,
152152
programName,
153153
accounts,
154+
hasDiscriminator: instructions.some(ix => ix.discriminator !== null),
154155
instructions,
155156
IX_DATA_OFFSET,
156157
};

0 commit comments

Comments
 (0)