// Copyright 2026 Google LLC
//
// 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.
//

edition = "2024";

package credentio;

import "cbor/tags.proto";

// Schema for Environmental Sustainability Metadata
// (c2pa.environmental-sustainability) Matches C2PA 2.4 technical specification.
message EnvironmentalSustainabilityAssertion {
  message Metric {
    // Required. The value of the metric.
    double value = 1 [(cbor.tags) = { name: "value" }];

    // Optional. The method used to measure the metric (reverse-DNS format).
    string measurement_method = 2 [(cbor.tags) = { name: "measurementMethod" }];
  }

  // Optional. Energy consumption in kilowatt-hours (kWh).
  Metric energy_kwh = 1 [(cbor.tags) = { name: "energy_kwh" }];

  // Optional. Greenhouse gas emissions in kilograms of CO2 equivalent (kgCO2e).
  Metric carbon_kgco2e = 2 [(cbor.tags) = { name: "carbon_kgco2e" }];

  // Optional. Water usage in litres.
  Metric water_litres = 3 [(cbor.tags) = { name: "water_litres" }];
}
