From 7a3253e0256b782d3106415a63c5e9f71c93edeb Mon Sep 17 00:00:00 2001 From: Pierre Dommerc Date: Wed, 5 Oct 2022 13:53:03 +0200 Subject: [PATCH] fix: typescript generate types (#1660) --- Cargo.lock | 1 + .../mixnet-contract/Cargo.toml | 1 + .../mixnet-contract/src/interval.rs | 9 +++++++++ .../mixnet-contract/src/mixnode.rs | 1 + .../mixnet-contract/src/rewarding/mod.rs | 9 +++++++++ tools/ts-rs-cli/src/main.rs | 11 ++++++++--- .../types/src/types/rust/DelegationEventKind.ts | 3 +-- ts-packages/types/src/types/rust/Interval.ts | 8 ++++++++ ts-packages/types/src/types/rust/RewardEstimate.ts | 4 ++-- .../types/src/types/rust/RewardEstimationResponse.ts | 11 ++++++----- ts-packages/types/src/types/rust/UnbondedMixnode.ts | 8 ++++++-- validator-api/validator-api-requests/src/models.rs | 7 ++++++- 12 files changed, 58 insertions(+), 15 deletions(-) create mode 100644 ts-packages/types/src/types/rust/Interval.ts diff --git a/Cargo.lock b/Cargo.lock index 69b2e902cd6..a075f9cb4e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3021,6 +3021,7 @@ dependencies = [ "bs58", "contracts-common", "cosmwasm-std", + "humantime-serde", "log", "rand_chacha 0.3.1", "schemars", diff --git a/common/cosmwasm-smart-contracts/mixnet-contract/Cargo.toml b/common/cosmwasm-smart-contracts/mixnet-contract/Cargo.toml index bd5a6c20852..a955313aca9 100644 --- a/common/cosmwasm-smart-contracts/mixnet-contract/Cargo.toml +++ b/common/cosmwasm-smart-contracts/mixnet-contract/Cargo.toml @@ -16,6 +16,7 @@ schemars = "0.8" thiserror = "1.0" contracts-common = { path = "../contracts-common" } serde_json = "1.0.0" +humantime-serde = "1.1.1" # TO CHECK WHETHER STILL NEEDED: log = "0.4.14" diff --git a/common/cosmwasm-smart-contracts/mixnet-contract/src/interval.rs b/common/cosmwasm-smart-contracts/mixnet-contract/src/interval.rs index 515c120439d..8568d183a3e 100644 --- a/common/cosmwasm-smart-contracts/mixnet-contract/src/interval.rs +++ b/common/cosmwasm-smart-contracts/mixnet-contract/src/interval.rs @@ -60,14 +60,23 @@ pub(crate) mod string_rfc3339_offset_date_time { } } +#[cfg_attr(feature = "generate-ts", derive(ts_rs::TS))] +#[cfg_attr( + feature = "generate-ts", + ts(export_to = "ts-packages/types/src/types/rust/Interval.ts") +)] #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Eq, Serialize)] pub struct Interval { id: IntervalId, epochs_in_interval: u32, + // TODO add a better TS type generation + #[cfg_attr(feature = "generate-ts", ts(type = "string"))] #[serde(with = "string_rfc3339_offset_date_time")] current_epoch_start: OffsetDateTime, current_epoch_id: EpochId, + #[cfg_attr(feature = "generate-ts", ts(type = "string"))] + #[serde(with = "humantime_serde")] epoch_length: Duration, total_elapsed_epochs: EpochId, } diff --git a/common/cosmwasm-smart-contracts/mixnet-contract/src/mixnode.rs b/common/cosmwasm-smart-contracts/mixnet-contract/src/mixnode.rs index d8ca88fa2a8..85751f7171a 100644 --- a/common/cosmwasm-smart-contracts/mixnet-contract/src/mixnode.rs +++ b/common/cosmwasm-smart-contracts/mixnet-contract/src/mixnode.rs @@ -580,6 +580,7 @@ pub struct UnbondedMixnode { #[cfg_attr(feature = "generate-ts", ts(type = "string | null"))] pub proxy: Option, + #[cfg_attr(feature = "generate-ts", ts(type = "number"))] pub unbonding_height: u64, } diff --git a/common/cosmwasm-smart-contracts/mixnet-contract/src/rewarding/mod.rs b/common/cosmwasm-smart-contracts/mixnet-contract/src/rewarding/mod.rs index 9aaaa8a1a5a..e50df764346 100644 --- a/common/cosmwasm-smart-contracts/mixnet-contract/src/rewarding/mod.rs +++ b/common/cosmwasm-smart-contracts/mixnet-contract/src/rewarding/mod.rs @@ -8,15 +8,24 @@ use serde::{Deserialize, Serialize}; pub mod helpers; pub mod simulator; +#[cfg_attr(feature = "generate-ts", derive(ts_rs::TS))] +#[cfg_attr( + feature = "generate-ts", + ts(export_to = "ts-packages/types/src/types/rust/RewardEstimate.ts") +)] #[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, JsonSchema, PartialEq, Eq)] pub struct RewardEstimate { + #[cfg_attr(feature = "generate-ts", ts(type = "string"))] pub total_node_reward: Decimal, // note that operator reward includes the operating_cost, // i.e. say total_node_reward was `1nym` and operating_cost was `2nym` // in that case the operator reward would still be `1nym` as opposed to 0 + #[cfg_attr(feature = "generate-ts", ts(type = "string"))] pub operator: Decimal, + #[cfg_attr(feature = "generate-ts", ts(type = "string"))] pub delegates: Decimal, + #[cfg_attr(feature = "generate-ts", ts(type = "string"))] pub operating_cost: Decimal, } diff --git a/tools/ts-rs-cli/src/main.rs b/tools/ts-rs-cli/src/main.rs index 5da24140dff..42217d4d8bc 100644 --- a/tools/ts-rs-cli/src/main.rs +++ b/tools/ts-rs-cli/src/main.rs @@ -1,6 +1,7 @@ +use mixnet_contract_common::rewarding::RewardEstimate; use mixnet_contract_common::{ - IntervalRewardParams, IntervalRewardingParamsUpdate, MixNode, MixNodeConfigUpdate, - RewardedSetNodeStatus, RewardingParams, UnbondedMixnode, + Interval as ContractInterval, IntervalRewardParams, IntervalRewardingParamsUpdate, MixNode, + MixNodeConfigUpdate, RewardedSetNodeStatus, RewardingParams, UnbondedMixnode, }; use nym_types::account::{Account, AccountEntry, AccountWithMnemonic, Balance}; use nym_types::currency::{CurrencyDenom, DecCoin}; @@ -28,7 +29,8 @@ use std::path::Path; use ts_rs::TS; use validator_api_requests::models::{ GatewayCoreStatusResponse, InclusionProbabilityResponse, MixnodeCoreStatusResponse, - MixnodeStatus, MixnodeStatusResponse, SelectionChance, StakeSaturationResponse, + MixnodeStatus, MixnodeStatusResponse, RewardEstimationResponse, SelectionChance, + StakeSaturationResponse, }; use vesting_contract_common::Period; use walkdir::WalkDir; @@ -65,6 +67,8 @@ fn main() { do_export!(RewardingParams); do_export!(RewardedSetNodeStatus); do_export!(UnbondedMixnode); + do_export!(RewardEstimate); + do_export!(ContractInterval); // common/types/src do_export!(Account); @@ -116,6 +120,7 @@ fn main() { do_export!(MixnodeStatusResponse); do_export!(SelectionChance); do_export!(StakeSaturationResponse); + do_export!(RewardEstimationResponse); // nym-wallet do_export!(AppEnv); diff --git a/ts-packages/types/src/types/rust/DelegationEventKind.ts b/ts-packages/types/src/types/rust/DelegationEventKind.ts index 4cff16fa5f0..a1db5fac12a 100644 --- a/ts-packages/types/src/types/rust/DelegationEventKind.ts +++ b/ts-packages/types/src/types/rust/DelegationEventKind.ts @@ -1,2 +1 @@ - -export type DelegationEventKind = "Delegate" | "Undelegate"; \ No newline at end of file +export type DelegationEventKind = 'Delegate' | 'Undelegate'; diff --git a/ts-packages/types/src/types/rust/Interval.ts b/ts-packages/types/src/types/rust/Interval.ts new file mode 100644 index 00000000000..b47687ae220 --- /dev/null +++ b/ts-packages/types/src/types/rust/Interval.ts @@ -0,0 +1,8 @@ +export interface Interval { + id: number; + epochs_in_interval: number; + current_epoch_start: string; + current_epoch_id: number; + epoch_length: string; + total_elapsed_epochs: number; +} diff --git a/ts-packages/types/src/types/rust/RewardEstimate.ts b/ts-packages/types/src/types/rust/RewardEstimate.ts index da8cd39cf5c..5d816c22d7c 100644 --- a/ts-packages/types/src/types/rust/RewardEstimate.ts +++ b/ts-packages/types/src/types/rust/RewardEstimate.ts @@ -1,6 +1,6 @@ -export type RewardEstimate = { +export interface RewardEstimate { total_node_reward: string; operator: string; delegates: string; operating_cost: string; -}; +} diff --git a/ts-packages/types/src/types/rust/RewardEstimationResponse.ts b/ts-packages/types/src/types/rust/RewardEstimationResponse.ts index aaa178934e4..7cc9bcf585c 100644 --- a/ts-packages/types/src/types/rust/RewardEstimationResponse.ts +++ b/ts-packages/types/src/types/rust/RewardEstimationResponse.ts @@ -1,9 +1,10 @@ -import { RewardEstimate } from './RewardEstimate'; -import { RewardingParams } from './RewardingParams'; +import type { Interval } from './Interval'; +import type { RewardEstimate } from './RewardEstimate'; +import type { RewardingParams } from './RewardingParams'; -export type RewardEstimationResponse = { +export interface RewardEstimationResponse { estimation: RewardEstimate; reward_params: RewardingParams; - // epoch: Interval; + epoch: Interval; as_at: number; -}; +} diff --git a/ts-packages/types/src/types/rust/UnbondedMixnode.ts b/ts-packages/types/src/types/rust/UnbondedMixnode.ts index 99145936175..1a01070af20 100644 --- a/ts-packages/types/src/types/rust/UnbondedMixnode.ts +++ b/ts-packages/types/src/types/rust/UnbondedMixnode.ts @@ -1,2 +1,6 @@ - -export interface UnbondedMixnode { identity_key: string, owner: string, proxy: string | null, unbonding_height: bigint, } \ No newline at end of file +export interface UnbondedMixnode { + identity_key: string; + owner: string; + proxy: string | null; + unbonding_height: number; +} diff --git a/validator-api/validator-api-requests/src/models.rs b/validator-api/validator-api-requests/src/models.rs index 248164ac460..166f3b8fce6 100644 --- a/validator-api/validator-api-requests/src/models.rs +++ b/validator-api/validator-api-requests/src/models.rs @@ -101,12 +101,17 @@ pub struct ComputeRewardEstParam { pub total_delegation: Option, } +#[cfg_attr(feature = "generate-ts", derive(ts_rs::TS))] +#[cfg_attr( + feature = "generate-ts", + ts(export_to = "ts-packages/types/src/types/rust/RewardEstimationResponse.ts") +)] #[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema)] pub struct RewardEstimationResponse { pub estimation: RewardEstimate, - pub reward_params: RewardingParams, pub epoch: Interval, + #[cfg_attr(feature = "generate-ts", ts(type = "number"))] pub as_at: i64, }