// 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_JUMBF_ENCODE_PARAMS_H_
#define THIRD_PARTY_CREDENTIO_JUMBF_ENCODE_PARAMS_H_

#include <optional>

#include "absl/strings/cord.h"

namespace jumbf {

// Common options for all encoding functions that write description boxes.
struct DescriptionBoxOptions {
  // Whether to set the requestable bit IFF `label` has a value (setting the
  // requestable bit without providing a label is not possible because it is not
  // permitted by the standard.)
  bool requestable_iff_label = true;
  std::optional<absl::Cord> label = std::nullopt;
  // Fully-encoded private content.
  std::optional<absl::Cord> private_content = std::nullopt;
};

}  // namespace jumbf

#endif  // THIRD_PARTY_CREDENTIO_JUMBF_ENCODE_PARAMS_H_
