ffsend_api/api/
data.rs

1use serde::Serialize;
2use thiserror::Error;
3
4use crate::file::remote_file::RemoteFile;
5
6/// An owned data structure, that wraps generic data.
7/// This structure is used to send owned data to the Send server.
8/// This owned data is authenticated using an `owner_token`,
9/// which this structure manages.
10#[derive(Debug, Serialize)]
11pub struct OwnedData<D> {
12    /// The owner token, used for request authentication purposes.
13    owner_token: String,
14
15    /// The wrapped data structure.
16    #[serde(flatten)]
17    inner: D,
18}
19
20impl<D> OwnedData<D>
21where
22    D: Serialize,
23{
24    /// Constructor.
25    pub fn new(owner_token: String, inner: D) -> Self {
26        OwnedData { owner_token, inner }
27    }
28
29    /// Wrap the given data structure with this owned data structure.
30    /// A `file` must be given, having a set owner token.
31    pub fn from(inner: D, file: &RemoteFile) -> Result<Self, Error> {
32        Ok(Self::new(
33            file.owner_token().ok_or(Error::NoOwnerToken)?.to_owned(),
34            inner,
35        ))
36    }
37}
38
39#[derive(Debug, Error)]
40pub enum Error {
41    /// Missing owner token, which is required.
42    #[error("missing owner token, must be specified")]
43    NoOwnerToken,
44}