fireblocks-sdk 2025.10.17

Rust implementation of the Fireblocks SDK
Documentation
// Fireblocks API
//
// Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain.  - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com)
//
// The version of the OpenAPI document: 1.8.0
// Contact: developers@fireblocks.com
// Generated by: https://openapi-generator.tech

use {
    crate::models,
    serde::{Deserialize, Serialize},
};

/// PolicyRuleV2 : V2 Policy rule which is enforced on transactions
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct PolicyRuleV2 {
    /// Name of the policy rule
    #[serde(rename = "name")]
    pub name: String,
    /// Unique identifier for the policy rule
    #[serde(rename = "id")]
    pub id: String,
    /// Policy engine version
    #[serde(rename = "policyEngineVersion")]
    pub policy_engine_version: PolicyEngineVersion,
    #[serde(rename = "type")]
    pub r#type: models::PolicyTypeV2,
    #[serde(rename = "subType", skip_serializing_if = "Option::is_none")]
    pub sub_type: Option<models::PolicyTypeV2>,
    #[serde(rename = "initiator")]
    pub initiator: models::InitiatorConfigPatternV2,
    #[serde(rename = "asset")]
    pub asset: models::AssetConfigV2,
    #[serde(rename = "source")]
    pub source: models::AccountConfigV2,
    #[serde(rename = "destination", skip_serializing_if = "Option::is_none")]
    pub destination: Option<models::DestinationConfigV2>,
    #[serde(rename = "account", skip_serializing_if = "Option::is_none")]
    pub account: Option<models::AccountConfigV2>,
    #[serde(rename = "verdict")]
    pub verdict: models::VerdictConfigV2,
    #[serde(rename = "amountOverTime", skip_serializing_if = "Option::is_none")]
    pub amount_over_time: Option<models::AmountOverTimeConfigV2>,
    #[serde(rename = "amount", skip_serializing_if = "Option::is_none")]
    pub amount: Option<models::AmountRangeV2>,
    /// External descriptor for the rule
    #[serde(rename = "externalDescriptor", skip_serializing_if = "Option::is_none")]
    pub external_descriptor: Option<String>,
    #[serde(rename = "method", skip_serializing_if = "Option::is_none")]
    pub method: Option<models::ContractMethodPatternV2>,
    /// Whether this is a global policy
    #[serde(rename = "isGlobalPolicy", skip_serializing_if = "Option::is_none")]
    pub is_global_policy: Option<bool>,
    #[serde(rename = "programCall", skip_serializing_if = "Option::is_none")]
    pub program_call: Option<models::ProgramCallConfigV2>,
    #[serde(rename = "screeningMetadata", skip_serializing_if = "Option::is_none")]
    pub screening_metadata: Option<models::ScreeningMetadataConfigV2>,
    #[serde(rename = "quoteAsset", skip_serializing_if = "Option::is_none")]
    pub quote_asset: Option<models::AssetConfigV2>,
    #[serde(rename = "baseAsset", skip_serializing_if = "Option::is_none")]
    pub base_asset: Option<models::AssetConfigV2>,
    #[serde(rename = "quoteAmount", skip_serializing_if = "Option::is_none")]
    pub quote_amount: Option<models::AmountRangeV2>,
    #[serde(rename = "baseAmount", skip_serializing_if = "Option::is_none")]
    pub base_amount: Option<models::AmountRangeV2>,
    #[serde(rename = "derivationPath", skip_serializing_if = "Option::is_none")]
    pub derivation_path: Option<models::DerivationPathConfigV2>,
    /// Index for the policy rule
    #[serde(rename = "index", skip_serializing_if = "Option::is_none")]
    pub index: Option<f64>,
}

impl PolicyRuleV2 {
    /// V2 Policy rule which is enforced on transactions
    pub fn new(
        name: String,
        id: String,
        policy_engine_version: PolicyEngineVersion,
        r#type: models::PolicyTypeV2,
        initiator: models::InitiatorConfigPatternV2,
        asset: models::AssetConfigV2,
        source: models::AccountConfigV2,
        verdict: models::VerdictConfigV2,
    ) -> PolicyRuleV2 {
        PolicyRuleV2 {
            name,
            id,
            policy_engine_version,
            r#type,
            sub_type: None,
            initiator,
            asset,
            source,
            destination: None,
            account: None,
            verdict,
            amount_over_time: None,
            amount: None,
            external_descriptor: None,
            method: None,
            is_global_policy: None,
            program_call: None,
            screening_metadata: None,
            quote_asset: None,
            base_asset: None,
            quote_amount: None,
            base_amount: None,
            derivation_path: None,
            index: None,
        }
    }
}
/// Policy engine version
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum PolicyEngineVersion {
    #[serde(rename = "v2")]
    V2,
}

impl Default for PolicyEngineVersion {
    fn default() -> PolicyEngineVersion {
        Self::V2
    }
}