#![allow(
missing_docs,
clippy::doc_markdown,
clippy::struct_excessive_bools,
clippy::derive_partial_eq_without_eq
)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Bounty {
pub constraints: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub eligibility: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fulfillment: Option<String>,
pub occurred_at: String,
pub requester: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reward: Option<BountyReward>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<BountyStatus>,
pub wants: BountyWants,
}
impl crate::Record for Bounty {
const NSID: &'static str = "dev.idiolect.bounty";
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WantAdapter {
pub framework: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub version_range: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WantLens {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub bidirectional: Option<bool>,
pub source: super::defs::SchemaRef,
pub target: super::defs::SchemaRef,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WantVerification {
pub kind: WantVerificationKind,
pub lens: super::defs::LensRef,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum WantVerificationKind {
RoundtripTest,
PropertyTest,
FormalProof,
ConformanceTest,
StaticCheck,
ConvergencePreserving,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "$type")]
pub enum BountyWants {
#[serde(rename = "dev.idiolect.bounty#wantLens")]
WantLens(WantLens),
#[serde(rename = "dev.idiolect.bounty#wantVerification")]
WantVerification(WantVerification),
#[serde(rename = "dev.idiolect.bounty#wantAdapter")]
WantAdapter(WantAdapter),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum BountyStatus {
Open,
Claimed,
Fulfilled,
Withdrawn,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BountyReward {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub external_ref: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
}