infinispan-fork 0.1.0

Rust client for the Infinispan REST API with DIGEST auth for version > 12.0.x
Documentation
use serde::{Deserialize, Serialize};

const DEFAULT_CONCURRENCY_LEVEL: i32 = 1_000;
const DEFAULT_ACQUIRE_TIMEOUT: i32 = 15_000;
const DEFAULT_STATE_TRANSFER_TIMEOUT: i32 = 60_000;
const DEFAULT_REMOTE_TIMEOUT: i32 = 17_500;

#[derive(Eq, PartialEq, Debug, Serialize, Deserialize)]
pub struct Local {
    locking: Locking,
    statistics: bool,
}

impl Default for Local {
    fn default() -> Self {
        Self {
            locking: Locking::default(),
            statistics: true,
        }
    }
}

#[derive(Eq, PartialEq, Debug, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct Distributed {
    mode: String,
    state_transfer: StateTransfer,
    locking: Locking,
    statistics: bool,
}

impl Distributed {
    pub fn create_async() -> Self {
        Self {
            mode: "ASYNC".into(),
            state_transfer: StateTransfer {
                timeout: DEFAULT_STATE_TRANSFER_TIMEOUT,
            },
            locking: Locking::default(),
            statistics: true,
        }
    }

    pub fn create_sync() -> Self {
        Self {
            mode: "SYNC".into(),
            state_transfer: StateTransfer {
                timeout: DEFAULT_STATE_TRANSFER_TIMEOUT,
            },
            locking: Locking::default(),
            statistics: true,
        }
    }
}

#[derive(Eq, PartialEq, Debug, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct Replicated {
    mode: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    remote_timeout: Option<i32>,
    state_transfer: StateTransfer,
    locking: Locking,
    statistics: bool,
}

impl Replicated {
    pub fn create_async() -> Self {
        Self {
            mode: "ASYNC".into(),
            remote_timeout: None,
            state_transfer: StateTransfer {
                timeout: DEFAULT_STATE_TRANSFER_TIMEOUT,
            },
            locking: Locking::default(),
            statistics: true,
        }
    }

    pub fn create_sync() -> Self {
        Self {
            mode: "SYNC".into(),
            remote_timeout: Some(DEFAULT_REMOTE_TIMEOUT),
            state_transfer: StateTransfer {
                timeout: DEFAULT_STATE_TRANSFER_TIMEOUT,
            },
            locking: Locking::default(),
            statistics: true,
        }
    }
}

#[derive(Eq, PartialEq, Debug, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct Invalidation {
    mode: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    remote_timeout: Option<i32>,
    locking: Locking,
    statistics: bool,
}

impl Invalidation {
    pub fn create_async() -> Self {
        Self {
            mode: "ASYNC".into(),
            remote_timeout: None,
            locking: Locking::default(),
            statistics: true,
        }
    }

    pub fn create_sync() -> Self {
        Self {
            mode: "SYNC".into(),
            remote_timeout: Some(DEFAULT_REMOTE_TIMEOUT),
            locking: Locking::default(),
            statistics: true,
        }
    }
}

#[derive(Eq, PartialEq, Debug, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
struct Locking {
    concurrency_level: i32,
    acquire_timeout: i32,
    striping: bool,
}

impl Default for Locking {
    fn default() -> Self {
        Self {
            concurrency_level: DEFAULT_CONCURRENCY_LEVEL,
            acquire_timeout: DEFAULT_ACQUIRE_TIMEOUT,
            striping: false,
        }
    }
}

#[derive(Eq, PartialEq, Debug, Serialize, Deserialize)]
struct StateTransfer {
    timeout: i32,
}