couch_rs 0.13.0

CouchDB library for Rust
Documentation
use crate::error::{CouchError, CouchResult, ErrorMessage};
use serde::{Deserialize, Serialize};

/// Design document created abstraction
#[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
pub struct DesignCreated {
    pub result: Option<String>,
    pub id: Option<String>,
    pub name: Option<String>,
    pub error: Option<String>,
    pub reason: Option<String>,
}

#[derive(PartialEq)]
pub enum Status {
    Created,
    NotCreated,
}

impl DesignCreated {
    /// Returns the status of the design creation operation.
    ///
    /// # Errors
    /// Returns a `CouchError` if the response contains an error or is missing expected fields.
    pub fn status(&self) -> CouchResult<Status> {
        if let Some(result) = &self.result {
            if result == "created" {
                Ok(Status::Created)
            } else {
                Ok(Status::NotCreated)
            }
        } else if let Some(err) = &self.error {
            Err(CouchError::CreateDesignFailed(ErrorMessage {
                message: err.clone(),
                upstream: None,
            }))
        } else {
            Err(CouchError::CreateDesignFailed(ErrorMessage {
                message: "DesignCreated did neither contain a 'result' nor an 'error' field as expected".to_string(),
                upstream: None,
            }))
        }
    }
}