Skip to content

Commit 4cec89b

Browse files
committed
Add example of overrides for specific types
1 parent 3fd4024 commit 4cec89b

File tree

4 files changed

+85
-14
lines changed

4 files changed

+85
-14
lines changed

crates/anchor-idl/src/program.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ use crate::{
1616
pub struct GeneratorOptions {
1717
/// Path to the IDL.
1818
pub idl_path: String,
19+
/// List of types to skip from generation. These should be provided by the caller instead.
20+
pub skip: Option<PathList>,
1921
/// List of zero copy structs.
2022
pub zero_copy: Option<PathList>,
2123
/// List of `repr(packed)` structs.
@@ -38,15 +40,23 @@ impl GeneratorOptions {
3840
let idl_contents = fs::read_to_string(&path).unwrap();
3941
let idl: anchor_lang_idl_spec::Idl = serde_json::from_str(&idl_contents).unwrap();
4042

43+
let skip = path_list_to_string(self.skip.as_ref());
4144
let zero_copy = path_list_to_string(self.zero_copy.as_ref());
4245
let packed = path_list_to_string(self.packed.as_ref());
4346

47+
let all_type_names = idl
48+
.accounts
49+
.iter()
50+
.map(|a| a.name.clone())
51+
.chain(idl.types.iter().map(|t| t.name.clone()))
52+
.collect::<HashSet<_>>();
53+
4454
let mut struct_opts: BTreeMap<String, StructOpts> = BTreeMap::new();
45-
let all_structs: HashSet<&String> = zero_copy.union(&packed).collect::<HashSet<_>>();
46-
all_structs.into_iter().for_each(|name| {
55+
all_type_names.iter().for_each(|name| {
4756
struct_opts.insert(
4857
name.to_string(),
4958
StructOpts {
59+
skip: skip.contains(name),
5060
zero_copy: zero_copy.contains(name),
5161
packed: packed.contains(name),
5262
},
@@ -57,8 +67,9 @@ impl GeneratorOptions {
5767
}
5868
}
5969

60-
#[derive(Clone, Copy, Default)]
70+
#[derive(Clone, Copy, Debug, Default)]
6171
pub struct StructOpts {
72+
pub skip: bool,
6273
pub packed: bool,
6374
pub zero_copy: bool,
6475
}

crates/anchor-idl/src/typedef.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -307,16 +307,20 @@ pub fn generate_typedefs(
307307
struct_opts: &BTreeMap<String, StructOpts>,
308308
) -> TokenStream {
309309
let defined = typedefs.iter().map(|def| {
310-
let struct_name = format_ident!("{}", def.name);
311-
match &def.ty {
312-
anchor_lang_idl_spec::IdlTypeDefTy::Struct { fields } => {
313-
let opts = struct_opts.get(&def.name).copied().unwrap_or_default();
314-
generate_struct(typedefs, &struct_name, fields, opts)
315-
}
316-
anchor_lang_idl_spec::IdlTypeDefTy::Enum { variants } => {
317-
generate_enum(typedefs, &struct_name, variants)
310+
let opts = struct_opts.get(&def.name).copied().unwrap_or_default();
311+
if opts.skip {
312+
quote! {}
313+
} else {
314+
let struct_name = format_ident!("{}", def.name);
315+
match &def.ty {
316+
anchor_lang_idl_spec::IdlTypeDefTy::Struct { fields } => {
317+
generate_struct(typedefs, &struct_name, fields, opts)
318+
}
319+
anchor_lang_idl_spec::IdlTypeDefTy::Enum { variants } => {
320+
generate_enum(typedefs, &struct_name, variants)
321+
}
322+
anchor_lang_idl_spec::IdlTypeDefTy::Type { alias: _ } => todo!(),
318323
}
319-
anchor_lang_idl_spec::IdlTypeDefTy::Type { alias: _ } => todo!(),
320324
}
321325
});
322326
quote! {

examples/kamino-lend/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
1010
#![allow(clippy::too_many_arguments)]
1111

12-
use anchor_lang::zero_copy;
12+
mod overrides;
13+
pub use overrides::*;
1314

1415
anchor_gen::generate_cpi_interface!(
1516
idl_path = "idl.json",
17+
skip(UpdateConfigMode),
1618
zero_copy(
17-
UpdateConfigMode,
1819
UpdateLendingMarketConfigValue,
1920
UpdateLendingMarketMode,
2021
LastUpdate,
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
use anchor_lang::prelude::*;
2+
3+
#[derive(AnchorSerialize, AnchorDeserialize, PartialEq, Eq, Clone, Copy, Debug)]
4+
#[repr(u64)]
5+
pub enum UpdateConfigMode {
6+
UpdateLoanToValuePct = 1,
7+
UpdateMaxLiquidationBonusBps = 2,
8+
UpdateLiquidationThresholdPct = 3,
9+
UpdateProtocolLiquidationFee = 4,
10+
UpdateProtocolTakeRate = 5,
11+
UpdateFeesBorrowFee = 6,
12+
UpdateFeesFlashLoanFee = 7,
13+
UpdateFeesReferralFeeBps = 8,
14+
UpdateDepositLimit = 9,
15+
UpdateBorrowLimit = 10,
16+
UpdateTokenInfoLowerHeuristic = 11,
17+
UpdateTokenInfoUpperHeuristic = 12,
18+
UpdateTokenInfoExpHeuristic = 13,
19+
UpdateTokenInfoTwapDivergence = 14,
20+
UpdateTokenInfoScopeTwap = 15,
21+
UpdateTokenInfoScopeChain = 16,
22+
UpdateTokenInfoName = 17,
23+
UpdateTokenInfoPriceMaxAge = 18,
24+
UpdateTokenInfoTwapMaxAge = 19,
25+
UpdateScopePriceFeed = 20,
26+
UpdatePythPrice = 21,
27+
UpdateSwitchboardFeed = 22,
28+
UpdateSwitchboardTwapFeed = 23,
29+
UpdateBorrowRateCurve = 24,
30+
UpdateEntireReserveConfig = 25,
31+
UpdateDebtWithdrawalCap = 26,
32+
UpdateDepositWithdrawalCap = 27,
33+
UpdateDebtWithdrawalCapCurrentTotal = 28,
34+
UpdateDepositWithdrawalCapCurrentTotal = 29,
35+
UpdateBadDebtLiquidationBonusBps = 30,
36+
UpdateMinLiquidationBonusBps = 31,
37+
UpdateDeleveragingMarginCallPeriod = 32,
38+
UpdateBorrowFactor = 33,
39+
UpdateAssetTier = 34,
40+
UpdateElevationGroup = 35,
41+
UpdateDeleveragingThresholdDecreaseBpsPerDay = 36,
42+
DeprecatedUpdateMultiplierSideBoost = 37,
43+
DeprecatedUpdateMultiplierTagBoost = 38,
44+
UpdateReserveStatus = 39,
45+
UpdateFarmCollateral = 40,
46+
UpdateFarmDebt = 41,
47+
UpdateDisableUsageAsCollateralOutsideEmode = 42,
48+
UpdateBlockBorrowingAboveUtilizationPct = 43,
49+
UpdateBlockPriceUsage = 44,
50+
UpdateBorrowLimitOutsideElevationGroup = 45,
51+
UpdateBorrowLimitsInElevationGroupAgainstThisReserve = 46,
52+
UpdateHostFixedInterestRateBps = 47,
53+
UpdateAutodeleverageEnabled = 48,
54+
UpdateDeleveragingBonusIncreaseBpsPerDay = 49,
55+
}

0 commit comments

Comments
 (0)