fluvio_sc_schema/objects/
delete.rs

1//!
2//! # Delete object
3//!
4//!
5
6use std::fmt::Debug;
7
8use anyhow::Result;
9
10use fluvio_protocol::{Encoder, Decoder, Version};
11use fluvio_protocol::api::Request;
12
13use crate::{DeletableAdminSpec, TryEncodableFrom};
14use crate::Status;
15use crate::AdminPublicApiKey;
16use super::classic::{ClassicDeleteApiEnum, ClassicDecodingDelete};
17use super::{COMMON_VERSION, TypeBuffer};
18
19#[derive(Debug, Default, Encoder, Decoder)]
20pub struct DeleteRequest<S: DeletableAdminSpec> {
21    key: S::DeleteKey,
22    #[fluvio(min_version = 13)]
23    force: bool,
24}
25
26impl<S> DeleteRequest<S>
27where
28    S: DeletableAdminSpec,
29{
30    pub fn new(key: S::DeleteKey) -> Self {
31        Self { key, force: false }
32    }
33
34    pub fn with(key: S::DeleteKey, force: bool) -> Self {
35        Self { key, force }
36    }
37
38    pub fn key(self) -> S::DeleteKey {
39        self.key
40    }
41
42    pub fn is_force(&self) -> bool {
43        self.force
44    }
45}
46
47// This can be auto generated by enum derive later
48#[derive(Debug, Default, Encoder)]
49pub struct ObjectApiDeleteRequest(TypeBuffer);
50
51impl<S> TryEncodableFrom<DeleteRequest<S>> for ObjectApiDeleteRequest
52where
53    S: DeletableAdminSpec,
54{
55    fn try_encode_from(input: DeleteRequest<S>, version: Version) -> Result<Self> {
56        Ok(Self(TypeBuffer::encode::<S, _>(input, version)?))
57    }
58
59    fn downcast(&self) -> Result<Option<DeleteRequest<S>>> {
60        self.0.downcast::<S, _>()
61    }
62}
63
64impl Request for ObjectApiDeleteRequest {
65    const API_KEY: u16 = AdminPublicApiKey::Delete as u16;
66    const MIN_API_VERSION: i16 = 1; // previous version
67    const DEFAULT_API_VERSION: i16 = COMMON_VERSION;
68    type Response = Status;
69}
70
71// below is for classic support, this should go away after we remove classic
72ClassicDeleteApiEnum!(DeleteRequest);
73ClassicDecodingDelete!(DeleteRequest);