neptunium_http/endpoints/invites/
create_channel_invite.rs1use bon::Builder;
2use neptunium_model::{
3 id::{Id, marker::ChannelMarker},
4 invites::InviteWithMetadata,
5 time::duration::{Duration, representation::Seconds},
6};
7use reqwest::Method;
8use serde::Serialize;
9
10use crate::{endpoints::Endpoint, request::Request};
11
12#[derive(Serialize, Copy, Clone, Debug, Builder, Default)]
13pub struct CreateChannelInviteOptions {
14 #[serde(skip_serializing_if = "Option::is_none")]
16 pub max_uses: Option<u8>,
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub max_age: Option<Duration<Seconds>>,
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub unique: Option<bool>,
23 #[serde(skip_serializing_if = "Option::is_none")]
26 pub temporary: Option<bool>,
27}
28
29#[derive(Builder, Copy, Clone, Debug)]
30pub struct CreateChannelInvite {
31 pub channel_id: Id<ChannelMarker>,
32 pub options: CreateChannelInviteOptions,
33}
34
35impl Endpoint for CreateChannelInvite {
36 type Response = InviteWithMetadata;
37
38 fn into_request(self) -> crate::request::Request {
39 Request::builder()
40 .method(Method::POST)
41 .body(serde_json::to_string(&self.options).unwrap())
42 .path(format!("/channels/{}/invites", self.channel_id))
43 .build()
44 }
45}