fuzion-flows 0.8.3

Interfaces for Fuzion Flows
Documentation
use std::fmt;

use fuzion_std::FeeCollector;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};

use cosmwasm_std::{Addr, Decimal, Uint128};

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
    UpdateConfig(UpdateConfigMsg),
    ConfirmConfig {},
    CreateFlows {
        flow_list: Vec<FlowCreate>,
    },
    CreateFlowTemplate {
        flow_template: FlowTemplateCreate,
    },
    CreateFlowFromTemplate {
        template_id: u64,
        taker: Addr,
        identifier: Option<String>,
    },
    Claim {
        id: u64,
    },
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct ConfigMsg {
    pub admins: Admins,
    pub contracts: Contracts,
    pub flow_type_config: Vec<FlowTypeConfigMsg>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct UpdateConfigMsg {
    pub admins: Option<Admins>,
    pub contracts: Option<Contracts>,
    pub flow_type_config: Option<Vec<FlowTypeConfigMsg>>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Admins {
    pub config_admin: Addr,
    pub confirm_admin: Addr,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct Contracts {
    pub oracle_price_contract: Addr,
    pub utilities_contract: Addr,
    pub funds_distributor_contract: Addr,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct FlowTypeConfigMsg {
    pub flow_type: FlowType,
    pub fee: Decimal,
    pub partner_fee: Decimal,
    pub fee_collectors: Vec<FeeCollector>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct FlowTemplateCreate {
    pub flow_type: FlowType,
    pub genesis_time: u64,
    pub maker: Option<Addr>,
    pub identifier: Option<u64>,
    pub schedules: Vec<FlowTemplateSchedule>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct FlowCreate {
    pub flow_type: FlowType,
    pub taker: Addr,
    pub denom: String,
    pub identifier: Option<String>,
    pub genesis_time: u64,
    pub schedules: Vec<FlowSchedule>,
}

#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)]
pub enum FlowType {
    Vesting,
}

impl fmt::Display for FlowType {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{self:?}")
    }
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct FlowTemplateSchedule {
    pub start_time: u64,
    pub end_time: u64,
    pub cliff_end_time: u64,
    pub percent: Uint128,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct FlowSchedule {
    pub start_time: u64,
    pub end_time: u64,
    pub cliff_end_time: u64,
    pub amount: Uint128,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct ExtendedFlowSchedule {
    pub start_time: u64,
    pub end_time: u64,
    pub cliff_end_time: u64,
    pub amount: Uint128,
    pub claimed: Uint128,
    pub claimable: Uint128,
}

impl ExtendedFlowSchedule {
    pub fn new(
        start_time: u64,
        end_time: u64,
        cliff_end_time: u64,
        amount: Uint128,
        claimed: Uint128,
        claimable: Uint128,
    ) -> Self {
        Self {
            start_time,
            end_time,
            cliff_end_time,
            amount,
            claimed,
            claimable,
        }
    }
}