Skip to content

Commit 62300ca

Browse files
committed
keytype: add missing source file
1 parent 186f7c4 commit 62300ca

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

src/keytype.rs

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// Copyright (c) 2015, Ben Boeckel
2+
// All rights reserved.
3+
//
4+
// Redistribution and use in source and binary forms, with or without modification,
5+
// are permitted provided that the following conditions are met:
6+
//
7+
// * Redistributions of source code must retain the above copyright notice,
8+
// this list of conditions and the following disclaimer.
9+
// * Redistributions in binary form must reproduce the above copyright notice,
10+
// this list of conditions and the following disclaimer in the documentation
11+
// and/or other materials provided with the distribution.
12+
// * Neither the name of this project nor the names of its contributors
13+
// may be used to endorse or promote products derived from this software
14+
// without specific prior written permission.
15+
//
16+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17+
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18+
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19+
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20+
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21+
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22+
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
23+
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25+
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26+
27+
use std::borrow::Cow;
28+
29+
/// A trait for representing a type of key in the Linux keyring subsystem.
30+
pub trait KeyType {
31+
/// The type for describing the key.
32+
type Description: KeyDescription + ?Sized;
33+
/// The type for representing a payload for the key.
34+
type Payload: KeyPayload + ?Sized;
35+
36+
/// The name of the keytype.
37+
fn name() -> &'static str;
38+
}
39+
40+
/// A description for a key.
41+
pub trait KeyDescription {
42+
/// The description of the key.
43+
fn description(&self) -> Cow<str>;
44+
}
45+
46+
impl KeyDescription for str {
47+
fn description(&self) -> Cow<str> {
48+
Cow::Borrowed(&self)
49+
}
50+
}
51+
52+
impl KeyDescription for String {
53+
fn description(&self) -> Cow<str> {
54+
Cow::Borrowed(&self)
55+
}
56+
}
57+
58+
/// A payload for a key.
59+
pub trait KeyPayload {
60+
/// The payload for the key.
61+
fn payload(&self) -> Cow<[u8]>;
62+
}
63+
64+
impl KeyPayload for () {
65+
fn payload(&self) -> Cow<[u8]> {
66+
Cow::Borrowed(&[])
67+
}
68+
}
69+
70+
impl KeyPayload for str {
71+
fn payload(&self) -> Cow<[u8]> {
72+
Cow::Borrowed(self.as_bytes())
73+
}
74+
}
75+
76+
impl KeyPayload for String {
77+
fn payload(&self) -> Cow<[u8]> {
78+
Cow::Borrowed(self.as_bytes())
79+
}
80+
}
81+
82+
impl KeyPayload for [u8] {
83+
fn payload(&self) -> Cow<[u8]> {
84+
Cow::Borrowed(self)
85+
}
86+
}
87+
88+
impl KeyPayload for Vec<u8> {
89+
fn payload(&self) -> Cow<[u8]> {
90+
Cow::Borrowed(&self)
91+
}
92+
}

0 commit comments

Comments
 (0)