1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
/*
* Yagna Market API
*
* The version of the OpenAPI document: 1.6.1
*
* Generated by: https://openapi-generator.tech
*/
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::{ErrorMessage, NodeId};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Proposal {
/// The object which includes all the Proposal properties.
/// This is a JSON object in \"flat convention\" - where keys are full
/// property names and their values indicate properties.
///
/// The value's Javascript type shall conform with the type of the
/// property (as indicated in Golem Standards).
///
/// ### Example property object:
/// ```json
/// {
/// "golem.com.pricing.model": "linear",
/// "golem.com.pricing.model.linear.coeffs": [0.001, 0.002, 0.0],
/// "golem.com.scheme": "payu",
/// "golem.com.scheme.payu.interval_sec": 6.0,
/// "golem.com.usage.vector": ["golem.usage.duration_sec", "golem.usage.cpu_sec"],
/// "golem.inf.cpu.architecture": "x86_64",
/// "golem.inf.cpu.cores": 4,
/// "golem.inf.cpu.threads": 7,
/// "golem.inf.mem.gib": 10.612468048930168,
/// "golem.inf.storage.gib": 81.7227783203125,
/// "golem.node.debug.subnet": "market-devnet",
/// "golem.node.id.name": "tworec@mf-market-devnet",
/// "golem.runtime.name": "vm",
/// "golem.runtime.version@v": "0.1.0"
/// }
/// ``` #[serde(rename = "properties")]
pub properties: serde_json::Value,
#[serde(rename = "constraints")]
pub constraints: String,
#[serde(rename = "proposalId")]
pub proposal_id: String,
#[serde(rename = "issuerId")]
pub issuer_id: NodeId,
/// See [State](enum.State.html).
#[serde(rename = "state")]
pub state: State,
/// Object creation timestamp
#[serde(rename = "timestamp")]
pub timestamp: DateTime<Utc>,
/// id of the proposal from other side which this proposal responds to
#[serde(rename = "prevProposalId", skip_serializing_if = "Option::is_none")]
pub prev_proposal_id: Option<String>,
}
impl Proposal {
pub fn new(
properties: serde_json::Value,
constraints: String,
proposal_id: String,
issuer_id: NodeId,
state: State,
timestamp: DateTime<Utc>,
) -> Proposal {
Proposal {
properties,
constraints,
proposal_id,
issuer_id,
state,
timestamp,
prev_proposal_id: None,
}
}
pub fn prev_proposal_id(&self) -> Result<&String, ErrorMessage> {
self.prev_proposal_id
.as_ref()
.ok_or("no previous proposal id".into())
}
}
/// * `Initial` - proposal arrived from the market as response to subscription
/// * `Draft` - bespoke counter-proposal issued by one party directly to other party (negotiation phase)
/// * `Rejected` by other party
/// * `Accepted` - promoted into the Agreement draft
/// * `Expired` - not accepted nor rejected before validity period
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum State {
#[serde(rename = "Initial")]
/// Proposal arrived from the market as response to subscription
Initial,
#[serde(rename = "Draft")]
/// Bespoke counter-proposal issued by one party directly to other party (negotiation phase)
Draft,
#[serde(rename = "Rejected")]
/// Rejected by other party
Rejected,
#[serde(rename = "Accepted")]
/// Promoted to the Agreement draft
Accepted,
#[serde(rename = "Expired")]
/// Not accepted nor rejected before validity period
Expired,
}