// Copyright 2021 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.

syntax = "proto3";

package pw_software_update;

import "pw_software_update/tuf.proto";

message UpdateBundle {
  // NOTE/TODO: SignedRootMetadata is not currently included as part of the
  // UpdateBundle. Updating of the root metdata needs to be handled in a
  // separate project-specific process. A standard upstream process can be added
  // in the future.

  optional SignedTimestampMetadata timestamp_metadata = 1;
  optional SignedSnapshotMetadata snapshot_metadata = 2;

  // Map of target metadata name to target metadata.
  // Target metadata name can be an arbitrary name or a path that describes
  // where the file lives relative to the base directory of the repository, as
  // described in the snapshot metadata. e.g. "path/to/target/0".
  map<string, SignedTargetsMetadata> target_metadata = 3;

  // Map of target file name to target payload bytes.
  // Target file name can be an arbitrary name or a path that describes where
  // the file lives relative to the base directory of the repository, as
  // described in the target metadata. e.g. "path/to/amber_tools/0".
  map<string, bytes> target_payloads = 4;
}

// Update bundle metadata
// Designed to inform the update server what the device currently has in-place.
message Manifest {
  optional SnapshotMetadata snapshot_metadata = 1;
  map<string, TargetsMetadata> targets_metadata = 2;
}
