1use serde::Serialize;
2use thiserror::Error;
3
4use crate::file::remote_file::RemoteFile;
5
6#[derive(Debug, Serialize)]
11pub struct OwnedData<D> {
12 owner_token: String,
14
15 #[serde(flatten)]
17 inner: D,
18}
19
20impl<D> OwnedData<D>
21where
22 D: Serialize,
23{
24 pub fn new(owner_token: String, inner: D) -> Self {
26 OwnedData { owner_token, inner }
27 }
28
29 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 #[error("missing owner token, must be specified")]
43 NoOwnerToken,
44}