1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

//! Types that are shared across more than one crate in the Fuchsia identity stack.
#![deny(missing_docs)]
#![warn(clippy::all)]
// Using `let () = ...` is often idiomatic in Fuchsia, since it asserts that the
// return type is (), and the compiler will flag if the return type ever changes
// (and needs to be used).
#![allow(clippy::let_unit_value)]

use serde::{Deserialize, Serialize};

// Async task management.
mod task_group;
// Staged file atomic write support.
mod staged_file;

/// Data associated with authentication enrollment.
#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
#[serde(transparent)]
pub struct EnrollmentData(pub Vec<u8>);

impl std::ops::Deref for EnrollmentData {
    type Target = Vec<u8>;

    fn deref(&self) -> &Self::Target {
        &self.0
    }
}

/// Data associated with an enrollment of an authentication mechanism
/// capable of storage unlock.
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct PrekeyMaterial(pub Vec<u8>);

impl std::ops::Deref for PrekeyMaterial {
    type Target = Vec<u8>;

    fn deref(&self) -> &Self::Target {
        &self.0
    }
}

pub use crate::task_group::{cancel_or, TaskGroup, TaskGroupCancel, TaskGroupError};

pub use crate::staged_file::{StagedFile, StagedFileError};