ascom-alpaca 1.0.0-beta.10

Rust implementation of the ASCOM Alpaca API for astronomy devices
Documentation
use serde::{Deserialize, Serialize};
use std::num::NonZeroU32;

#[derive(Debug, Serialize, Clone, Copy)]
pub(crate) struct RequestTransaction {
    #[serde(rename = "ClientTransactionID")]
    pub(crate) client_transaction_id: NonZeroU32,
    #[serde(rename = "ClientID")]
    pub(crate) client_id: NonZeroU32,
}

impl RequestTransaction {
    pub(crate) fn new(client_id: NonZeroU32) -> Self {
        Self {
            client_transaction_id: auto_increment!(),
            client_id,
        }
    }
}

#[derive(Debug, Serialize)]
pub(crate) struct RequestWithTransaction<T> {
    #[serde(flatten)]
    pub(crate) transaction: RequestTransaction,
    #[serde(flatten)]
    pub(crate) params: T,
}

#[derive(Debug, Clone, Copy, Deserialize)]
pub(crate) struct ResponseTransaction {
    #[serde(rename = "ClientTransactionID")]
    pub(crate) client_transaction_id: Option<NonZeroU32>,
    #[serde(rename = "ClientID")]
    pub(crate) server_transaction_id: Option<NonZeroU32>,
}

#[derive(Debug)]
pub(crate) struct ResponseWithTransaction<T> {
    pub(crate) transaction: ResponseTransaction,
    pub(crate) response: T,
}