use http::Method;
use serde::Deserialize;
use crate::core::operation::Operation;
use crate::error::Result;
#[allow(missing_docs)]
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct NumberInfo {
pub phone_number: Option<String>,
pub is_active: Option<bool>,
pub last_active: Option<String>,
pub plan_kind: Option<String>,
}
#[allow(missing_docs)]
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct ListNumbersResponse {
pub numbers: Vec<NumberInfo>,
}
#[derive(Debug, Clone, Default)]
pub struct ListNumbers;
impl Operation for ListNumbers {
type Output = ListNumbersResponse;
const METHOD: Method = Method::GET;
fn path(&self) -> String {
"/me/numbers".into()
}
}
#[derive(Debug)]
pub struct Numbers<'c, C> {
pub(crate) client: &'c C,
}
#[cfg(feature = "async")]
impl crate::Client {
pub fn numbers(&self) -> Numbers<'_, crate::Client> {
Numbers { client: self }
}
}
#[cfg(feature = "sync")]
impl crate::BlockingClient {
pub fn numbers(&self) -> Numbers<'_, crate::BlockingClient> {
Numbers { client: self }
}
}
#[cfg(feature = "async")]
impl Numbers<'_, crate::Client> {
pub async fn list(&self) -> Result<ListNumbersResponse> {
self.client.send(ListNumbers).await
}
}
#[cfg(feature = "sync")]
impl Numbers<'_, crate::BlockingClient> {
pub fn list(&self) -> Result<ListNumbersResponse> {
self.client.send(ListNumbers)
}
}
#[cfg(test)]
#[allow(
clippy::unwrap_used,
clippy::expect_used,
clippy::panic,
clippy::print_stdout,
clippy::unreadable_literal
)]
mod tests {
use super::*;
use crate::core::operation::Operation;
#[test]
fn list_numbers_method_is_get() {
assert_eq!(ListNumbers::METHOD, http::Method::GET);
}
#[test]
fn list_numbers_path() {
assert_eq!(ListNumbers.path(), "/me/numbers");
}
}