manta-cli 1.59.9-beta.5

Another CLI for ALPS
use manta_backend_dispatcher::{
  error::Error,
  interfaces::hsm::component::ComponentTrait,
  types::{Component, ComponentArrayPostArray, NodeMetadataArray},
};

use StaticBackendDispatcher::*;

use serde_json::Value;

use crate::manta_backend_dispatcher::StaticBackendDispatcher;

impl ComponentTrait for StaticBackendDispatcher {
  async fn get_all_nodes(
    &self,
    auth_token: &str,
    nid_only: Option<&str>,
  ) -> Result<NodeMetadataArray, Error> {
    match self {
      CSM(b) => b.get_all_nodes(auth_token, nid_only).await,
      OCHAMI(b) => b.get_all_nodes(auth_token, nid_only).await,
    }
  }

  async fn get_node_metadata_available(
    &self,
    auth_token: &str,
  ) -> Result<Vec<Component>, Error> {
    match self {
      CSM(b) => b.get_node_metadata_available(auth_token).await,
      OCHAMI(b) => b.get_node_metadata_available(auth_token).await,
    }
  }

  async fn get(
    &self,
    auth_token: &str,
    id: Option<&str>,
    r#type: Option<&str>,
    state: Option<&str>,
    flag: Option<&str>,
    role: Option<&str>,
    subrole: Option<&str>,
    enabled: Option<&str>,
    software_status: Option<&str>,
    subtype: Option<&str>,
    arch: Option<&str>,
    class: Option<&str>,
    nid: Option<&str>,
    nid_start: Option<&str>,
    nid_end: Option<&str>,
    partition: Option<&str>,
    group: Option<&str>,
    state_only: Option<&str>,
    flag_only: Option<&str>,
    role_only: Option<&str>,
    nid_only: Option<&str>,
  ) -> Result<NodeMetadataArray, Error> {
    match self {
      CSM(b) => {
        b.get(
          auth_token,
          id,
          r#type,
          state,
          flag,
          role,
          subrole,
          enabled,
          software_status,
          subtype,
          arch,
          class,
          nid,
          nid_start,
          nid_end,
          partition,
          group,
          state_only,
          flag_only,
          role_only,
          nid_only,
        )
        .await
      }
      OCHAMI(b) => {
        b.get(
          auth_token,
          id,
          r#type,
          state,
          flag,
          role,
          subrole,
          enabled,
          software_status,
          subtype,
          arch,
          class,
          nid,
          nid_start,
          nid_end,
          partition,
          group,
          state_only,
          flag_only,
          role_only,
          nid_only,
        )
        .await
      }
    }
  }

  async fn post_nodes(
    &self,
    auth_token: &str,
    component: ComponentArrayPostArray,
  ) -> Result<(), Error> {
    match self {
      CSM(b) => b.post_nodes(auth_token, component).await,
      OCHAMI(b) => b.post_nodes(auth_token, component).await,
    }
  }

  async fn delete_node(
    &self,
    auth_token: &str,
    id: &str,
  ) -> Result<Value, Error> {
    match self {
      CSM(b) => b.delete_node(auth_token, id).await,
      OCHAMI(b) => b.delete_node(auth_token, id).await,
    }
  }

  async fn nid_to_xname(
    &self,
    auth_token: &str,
    user_input_nid: &str,
    is_regex: bool,
  ) -> Result<Vec<String>, Error> {
    match self {
      CSM(b) => b.nid_to_xname(auth_token, user_input_nid, is_regex).await,
      OCHAMI(b) => b.nid_to_xname(auth_token, user_input_nid, is_regex).await,
    }
  }
}