// Copyright IBM Corp. 2020, 2026
// SPDX-License-Identifier: MPL-2.0

syntax = "proto3";

package controller.api.v1;

option go_package = "github.com/hashicorp/boundary/internal/gen/controller/api;api";

// Error information relevant to an error that was wrapped by the backend.
message WrappedError {
  // A string indicating what operation was being run when the wrapped error occurred.
  string op = 1;

  // The wrapped error message.
  string message = 2;
}

// Additional details regarding a specific error.
message ErrorDetails {
  // Request-field-specific error details.
  repeated FieldError request_fields = 1 [json_name = "request_fields"];

  // The errors that were wrapped in the backend for this returned error.
  repeated WrappedError wrapped_errors = 2 [json_name = "wrapped_errors"];
}

// FieldErrors contains error information on a per field basis.
message FieldError {
  // The name of the field.
  string name = 1;

  // The description of the error.
  string description = 2;
}

// Error is returned by the JSON API when an error occurs.
message Error {
  // The kind of error this is.
  string kind = 1;

  // An string indicating what operation was being run when the error was returned.
  string op = 2;

  // A human-readable explanation specific to this occurrence of the error.
  string message = 3;

  // Additional metadata regarding the error. Depending on the error, different fields are populated.
  ErrorDetails details = 4;
}
