Skip to main content

deribit_http/model/
affiliate.rs

1//! Affiliate program models for Deribit API
2//!
3//! This module contains types for affiliate program information.
4
5use serde::{Deserialize, Serialize};
6
7/// Affiliate program information
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9pub struct AffiliateProgramInfo {
10    /// Whether the affiliate program is enabled
11    pub is_enabled: bool,
12    /// Affiliate referral link
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub link: Option<String>,
15    /// Number of referred users
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub number_of_affiliates: Option<u64>,
18    /// Total received commission amount
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub received: Option<f64>,
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26
27    #[test]
28    fn test_affiliate_info_deserialization() {
29        let json = r#"{
30            "is_enabled": true,
31            "link": "https://deribit.com/?ref=ABC123",
32            "number_of_affiliates": 5,
33            "received": 0.001
34        }"#;
35
36        let info: AffiliateProgramInfo = serde_json::from_str(json).expect("Failed to parse");
37        assert!(info.is_enabled);
38        assert!(info.link.is_some());
39        assert_eq!(info.number_of_affiliates, Some(5));
40    }
41
42    #[test]
43    fn test_affiliate_info_disabled() {
44        let json = r#"{
45            "is_enabled": false
46        }"#;
47
48        let info: AffiliateProgramInfo = serde_json::from_str(json).expect("Failed to parse");
49        assert!(!info.is_enabled);
50        assert!(info.link.is_none());
51    }
52}