Role can be inferred from the Metadata trait
diff --git a/src/client.rs b/src/client.rs
index b9933c0..cbe1548 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -137,7 +137,6 @@
let root = local
.fetch_metadata(
- &Role::Root,
&MetadataPath::from_role(&Role::Root),
&MetadataVersion::Number(1),
&config.max_root_size,
@@ -146,7 +145,6 @@
)
.or_else(|_| {
local.fetch_metadata(
- &Role::Root,
&MetadataPath::from_role(&Role::Root),
&MetadataVersion::Number(1),
&config.max_root_size,
@@ -184,7 +182,6 @@
let root = local
.fetch_metadata(
- &Role::Root,
&MetadataPath::from_role(&Role::Root),
&MetadataVersion::Number(1),
&config.max_root_size,
@@ -193,7 +190,6 @@
)
.or_else(|_| {
remote.fetch_metadata(
- &Role::Root,
&MetadataPath::from_role(&Role::Root),
&MetadataVersion::Number(1),
&config.max_root_size,
@@ -270,7 +266,6 @@
U: PathTranslator,
{
let latest_root = repo.fetch_metadata(
- &Role::Root,
&MetadataPath::from_role(&Role::Root),
&MetadataVersion::None,
&config.max_root_size,
@@ -295,7 +290,6 @@
for i in (tuf.root().version() + 1)..latest_version {
let signed = repo.fetch_metadata(
- &Role::Root,
&MetadataPath::from_role(&Role::Root),
&MetadataVersion::Number(i),
&config.max_root_size,
@@ -322,7 +316,6 @@
U: PathTranslator,
{
let ts = repo.fetch_metadata(
- &Role::Timestamp,
&MetadataPath::from_role(&Role::Timestamp),
&MetadataVersion::None,
&config.max_timestamp_size,
@@ -357,7 +350,6 @@
};
let snap = repo.fetch_metadata(
- &Role::Snapshot,
&MetadataPath::from_role(&Role::Snapshot),
&version,
&Some(snapshot_description.size()),
@@ -401,7 +393,6 @@
};
let targets = repo.fetch_metadata(
- &Role::Targets,
&MetadataPath::from_role(&Role::Targets),
&version,
&Some(targets_description.size()),
@@ -516,7 +507,6 @@
let signed_meta = match local
.fetch_metadata::<TargetsMetadata>(
- &Role::Targets,
delegation.role(),
&MetadataVersion::None,
&Some(role_meta.size()),
@@ -525,7 +515,6 @@
)
.or_else(|_| {
remote.fetch_metadata::<TargetsMetadata>(
- &Role::Targets,
delegation.role(),
&version,
&Some(role_meta.size()),
@@ -547,7 +536,6 @@
match tuf.update_delegation(delegation.role(), &signed_meta) {
Ok(_) => {
match local.store_metadata(
- &Role::Targets,
delegation.role(),
&MetadataVersion::None,
&signed_meta,
@@ -816,7 +804,6 @@
.unwrap();
repo.store_metadata(
- &Role::Root,
&MetadataPath::from_role(&Role::Root),
&MetadataVersion::Number(1),
&root,
@@ -838,7 +825,6 @@
root.add_signature(&KEYS[0]).unwrap();
repo.store_metadata(
- &Role::Root,
&MetadataPath::from_role(&Role::Root),
&MetadataVersion::Number(2),
&root,
@@ -860,13 +846,11 @@
root.add_signature(&KEYS[1]).unwrap();
repo.store_metadata(
- &Role::Root,
&MetadataPath::from_role(&Role::Root),
&MetadataVersion::Number(3),
&root,
).unwrap();
repo.store_metadata(
- &Role::Root,
&MetadataPath::from_role(&Role::Root),
&MetadataVersion::None,
&root,
diff --git a/src/repository.rs b/src/repository.rs
index e0d36a8..313069f 100644
--- a/src/repository.rs
+++ b/src/repository.rs
@@ -15,7 +15,7 @@
use crypto::{self, HashAlgorithm, HashValue};
use error::Error;
use interchange::DataInterchange;
-use metadata::{SignedMetadata, MetadataVersion, Role, Metadata, TargetPath, TargetDescription,
+use metadata::{SignedMetadata, MetadataVersion, Metadata, TargetPath, TargetDescription,
MetadataPath};
use util::SafeReader;
@@ -37,7 +37,6 @@
/// hashes of the metadata to match.
fn store_metadata<M>(
&mut self,
- role: &Role,
meta_path: &MetadataPath,
version: &MetadataVersion,
metadata: &SignedMetadata<D, M>,
@@ -48,7 +47,6 @@
/// Fetch signed metadata.
fn fetch_metadata<M>(
&mut self,
- role: &Role,
meta_path: &MetadataPath,
version: &MetadataVersion,
max_size: &Option<usize>,
@@ -72,21 +70,13 @@
) -> Result<SafeReader<Self::TargetRead>>;
/// Perform a sanity check that `M`, `Role`, and `MetadataPath` all desrcribe the same entity.
- fn check<M>(role: &Role, meta_path: &MetadataPath) -> Result<()>
+ fn check<M>(meta_path: &MetadataPath) -> Result<()>
where
M: Metadata,
{
- if role != &M::role() {
- return Err(Error::IllegalArgument(format!(
- "Attempted to store {} metadata as {}.",
- M::role(),
- role
- )));
- }
-
- if !role.fuzzy_matches_path(meta_path) {
+ if !M::role().fuzzy_matches_path(meta_path) {
return Err(Error::IllegalArgument(
- format!("Role {} does not match path {:?}", role, meta_path),
+ format!("Role {} does not match path {:?}", M::role(), meta_path),
));
}
@@ -134,7 +124,6 @@
fn store_metadata<M>(
&mut self,
- role: &Role,
meta_path: &MetadataPath,
version: &MetadataVersion,
metadata: &SignedMetadata<D, M>,
@@ -142,7 +131,7 @@
where
M: Metadata,
{
- Self::check::<M>(role, meta_path)?;
+ Self::check::<M>(meta_path)?;
let components = meta_path.components::<D>(version);
let mut path = self.local_path.join("metadata");
@@ -168,7 +157,6 @@
/// Fetch signed metadata.
fn fetch_metadata<M>(
&mut self,
- role: &Role,
meta_path: &MetadataPath,
version: &MetadataVersion,
max_size: &Option<usize>,
@@ -178,7 +166,7 @@
where
M: Metadata,
{
- Self::check::<M>(role, meta_path)?;
+ Self::check::<M>(meta_path)?;
let mut path = self.local_path.join("metadata");
path.extend(meta_path.components::<D>(&version));
@@ -338,7 +326,6 @@
/// This always returns `Err` as storing over HTTP is not yet supported.
fn store_metadata<M>(
&mut self,
- _: &Role,
_: &MetadataPath,
_: &MetadataVersion,
_: &SignedMetadata<D, M>,
@@ -353,7 +340,6 @@
fn fetch_metadata<M>(
&mut self,
- role: &Role,
meta_path: &MetadataPath,
version: &MetadataVersion,
max_size: &Option<usize>,
@@ -363,7 +349,7 @@
where
M: Metadata,
{
- Self::check::<M>(role, meta_path)?;
+ Self::check::<M>(meta_path)?;
let resp = self.get(
&self.metadata_prefix,
@@ -452,7 +438,6 @@
fn store_metadata<M>(
&mut self,
- role: &Role,
meta_path: &MetadataPath,
version: &MetadataVersion,
metadata: &SignedMetadata<D, M>,
@@ -460,7 +445,7 @@
where
M: Metadata,
{
- Self::check::<M>(role, meta_path)?;
+ Self::check::<M>(meta_path)?;
let mut buf = Vec::new();
D::to_writer(&mut buf, metadata)?;
let _ = self.metadata.insert(
@@ -472,7 +457,6 @@
fn fetch_metadata<M>(
&mut self,
- role: &Role,
meta_path: &MetadataPath,
version: &MetadataVersion,
max_size: &Option<usize>,
@@ -482,7 +466,7 @@
where
M: Metadata,
{
- Self::check::<M>(role, meta_path)?;
+ Self::check::<M>(meta_path)?;
match self.metadata.get(&(meta_path.clone(), version.clone())) {
Some(bytes) => {
diff --git a/tests/simple_example.rs b/tests/simple_example.rs
index fe7a89c..fc06d14 100644
--- a/tests/simple_example.rs
+++ b/tests/simple_example.rs
@@ -9,7 +9,7 @@
use tuf::client::{Client, Config, PathTranslator};
use tuf::crypto::{PrivateKey, SignatureScheme, KeyId, HashAlgorithm};
use tuf::interchange::{DataInterchange, Json};
-use tuf::metadata::{RoleDefinition, RootMetadata, Role, MetadataVersion, MetadataPath,
+use tuf::metadata::{RoleDefinition, RootMetadata, MetadataVersion, MetadataPath,
SignedMetadata, TargetDescription, VirtualTargetPath, TargetsMetadata,
MetadataDescription, SnapshotMetadata, TimestampMetadata, TargetPath};
use tuf::repository::{EphemeralRepository, Repository};
@@ -108,13 +108,11 @@
let signed = SignedMetadata::<Json, RootMetadata>::new(&root, &root_key)?;
remote.store_metadata(
- &Role::Root,
&MetadataPath::new("root".into())?,
&MetadataVersion::Number(1),
&signed,
)?;
remote.store_metadata(
- &Role::Root,
&MetadataPath::new("root".into())?,
&MetadataVersion::None,
&signed,
@@ -134,13 +132,11 @@
let signed = SignedMetadata::<Json, TargetsMetadata>::new(&targets, &targets_key)?;
remote.store_metadata(
- &Role::Targets,
&MetadataPath::new("targets".into())?,
&MetadataVersion::Number(1),
&signed,
)?;
remote.store_metadata(
- &Role::Targets,
&MetadataPath::new("targets".into())?,
&MetadataVersion::None,
&signed,
@@ -159,13 +155,11 @@
let signed = SignedMetadata::<Json, SnapshotMetadata>::new(&snapshot, &snapshot_key)?;
remote.store_metadata(
- &Role::Snapshot,
&MetadataPath::new("snapshot".into())?,
&MetadataVersion::Number(1),
&signed,
)?;
remote.store_metadata(
- &Role::Snapshot,
&MetadataPath::new("snapshot".into())?,
&MetadataVersion::None,
&signed,
@@ -180,13 +174,11 @@
let signed = SignedMetadata::<Json, TimestampMetadata>::new(×tamp, ×tamp_key)?;
remote.store_metadata(
- &Role::Timestamp,
&MetadataPath::new("timestamp".into())?,
&MetadataVersion::Number(1),
&signed,
)?;
remote.store_metadata(
- &Role::Timestamp,
&MetadataPath::new("timestamp".into())?,
&MetadataVersion::None,
&signed,