// 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.
//

#ifndef THIRD_PARTY_CREDENTIO_ASSERTION_ACTIONS_ASSERTION_VALIDATOR_H_
#define THIRD_PARTY_CREDENTIO_ASSERTION_ACTIONS_ASSERTION_VALIDATOR_H_

#include "proto/actions_assertion.pb.h"
#include "proto/manifest.pb.h"
#include "validator/tracker.h"

namespace credentio {

// Validator of actions assertions according to
// https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_c2pa_actions_validation.
class ActionsAssertionValidator {
 public:
  bool Validate(const Manifest& manifest,
                ValidationTracker& validation_tracker) const;
};
}  // namespace credentio

#endif  // THIRD_PARTY_CREDENTIO_ASSERTION_ACTIONS_ASSERTION_VALIDATOR_H_
