clevercloud_sdk/v4/addon_provider/
mysql.rs1use std::{
7 convert::TryFrom,
8 fmt::{self, Debug, Display, Formatter},
9 str::FromStr,
10};
11
12#[cfg(feature = "logging")]
13use log::{Level, debug, log_enabled};
14use oauth10a::client::{ClientError, RestClient};
15#[cfg(feature = "jsonschemas")]
16use schemars::JsonSchema_repr as JsonSchemaRepr;
17use serde_repr::{Deserialize_repr as DeserializeRepr, Serialize_repr as SerializeRepr};
18
19use crate::{
20 Client,
21 v4::addon_provider::{AddonProvider, AddonProviderId},
22};
23
24#[derive(thiserror::Error, Debug)]
28pub enum Error {
29 #[error("failed to parse version from '{0}', available versions are 5.7 and 8.0")]
30 ParseVersion(String),
31 #[error("failed to get information about addon provider '{0}', {1}")]
32 Get(AddonProviderId, ClientError),
33}
34
35#[cfg_attr(feature = "jsonschemas", derive(JsonSchemaRepr))]
39#[derive(SerializeRepr, DeserializeRepr, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Debug)]
40#[serde(untagged)]
41#[repr(i32)]
42pub enum Version {
43 V5dot7 = 57,
44 V8dot0 = 80,
45 V8dot4 = 84,
46}
47
48impl FromStr for Version {
49 type Err = Error;
50
51 fn from_str(s: &str) -> Result<Self, Self::Err> {
52 Ok(match s {
53 "5.7" => Self::V5dot7,
54 "8.0" => Self::V8dot0,
55 "8.4" => Self::V8dot4,
56 _ => {
57 return Err(Error::ParseVersion(s.to_owned()));
58 }
59 })
60 }
61}
62
63impl TryFrom<String> for Version {
64 type Error = Error;
65
66 fn try_from(s: String) -> Result<Self, Self::Error> {
67 Self::from_str(&s)
68 }
69}
70
71#[allow(clippy::from_over_into)]
72impl Into<String> for Version {
73 fn into(self) -> String {
74 self.to_string()
75 }
76}
77
78impl Display for Version {
79 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
80 match self {
81 Self::V5dot7 => write!(f, "5.7"),
82 Self::V8dot0 => write!(f, "8.0"),
83 Self::V8dot4 => write!(f, "8.4"),
84 }
85 }
86}
87
88#[cfg_attr(feature = "tracing", tracing::instrument)]
93pub async fn get(client: &Client) -> Result<AddonProvider<Version>, Error> {
94 let path = format!(
95 "{}/v4/addon-providers/{}",
96 client.endpoint,
97 AddonProviderId::MySql
98 );
99
100 #[cfg(feature = "logging")]
101 if log_enabled!(Level::Debug) {
102 debug!(
103 "execute a request to get information about the mysql addon-provider, path: '{}', name: '{}'",
104 &path,
105 AddonProviderId::MySql
106 );
107 }
108
109 client
110 .get(&path)
111 .await
112 .map_err(|err| Error::Get(AddonProviderId::MySql, err))
113}