amqp_worker 0.9.0

AMQP Worker to listen and provide trait to process message
Documentation
pub mod container;
pub mod credential;

#[derive(Clone, Default, Debug, Serialize, Deserialize, PartialEq)]
pub struct Requirement {
  pub paths: Option<Vec<String>>,
}

#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
#[serde(tag = "type")]
pub enum Parameter {
  #[serde(rename = "array_of_strings")]
  ArrayOfStringsParam {
    id: String,
    default: Option<Vec<String>>,
    value: Option<Vec<String>>,
  },
  #[serde(rename = "boolean")]
  BooleanParam {
    id: String,
    default: Option<bool>,
    value: Option<bool>,
  },
  #[serde(rename = "credential")]
  CredentialParam {
    id: String,
    default: Option<String>,
    value: Option<String>,
  },
  #[serde(rename = "integer")]
  IntegerParam {
    id: String,
    default: Option<i64>,
    value: Option<i64>,
  },
  #[serde(rename = "requirements")]
  RequirementParam {
    id: String,
    default: Option<Requirement>,
    value: Option<Requirement>,
  },
  #[serde(rename = "string")]
  StringParam {
    id: String,
    default: Option<String>,
    value: Option<String>,
  },
}

impl Parameter {
  pub fn get_id(&self) -> String {
    match self {
      Parameter::ArrayOfStringsParam { id, .. }
      | Parameter::BooleanParam { id, .. }
      | Parameter::CredentialParam { id, .. }
      | Parameter::IntegerParam { id, .. }
      | Parameter::RequirementParam { id, .. }
      | Parameter::StringParam { id, .. } => id.clone(),
    }
  }

  pub fn has_value_or_default(&self) -> bool {
    match self {
      Parameter::ArrayOfStringsParam { value, default, .. } => value.is_some() || default.is_some(),
      Parameter::BooleanParam { value, default, .. } => value.is_some() || default.is_some(),
      Parameter::CredentialParam { value, default, .. } => value.is_some() || default.is_some(),
      Parameter::IntegerParam { value, default, .. } => value.is_some() || default.is_some(),
      Parameter::RequirementParam { value, default, .. } => value.is_some() || default.is_some(),
      Parameter::StringParam { value, default, .. } => value.is_some() || default.is_some(),
    }
  }
}

macro_rules! parameter_to_string {
  ($default:tt, $value:tt, $pattern:tt) => {{
    let current_value = if let Some(value) = $value {
      value
    } else if let Some(default) = $default {
      default
    } else {
      return "".to_string();
    };
    format!($pattern, current_value)
  }};
}

impl ToString for Parameter {
  fn to_string(&self) -> String {
    match self {
      Parameter::ArrayOfStringsParam { default, value, .. } => {
        parameter_to_string!(default, value, "{:?}")
      }
      Parameter::RequirementParam { default, value, .. } => {
        parameter_to_string!(default, value, "{:?}")
      }
      Parameter::BooleanParam { default, value, .. } => parameter_to_string!(default, value, "{}"),
      Parameter::CredentialParam { default, value, .. } => {
        parameter_to_string!(default, value, "{}")
      }
      Parameter::IntegerParam { default, value, .. } => parameter_to_string!(default, value, "{}"),
      Parameter::StringParam { default, value, .. } => parameter_to_string!(default, value, "{}"),
    }
  }
}