// Copyright 2025 Anapaya Systems
//
// 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
//
//   http://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.

//! Bindings for [gRPC](https://grpc.io/) types and services used within SCION's control plane.
//!
//! The code is autogenerated using [tonic] from the protobuf definitions copied from the [SCION
//! reference implementation][scionproto].
//!
//! [scionproto]: https://github.com/scionproto/scion

// Disable missing docs warnings for generated files as they're copied from scionproto.
#![allow(missing_docs)]

pub use prost::Message;

pub mod drkey {
    //! Types and services for dynamically re-creatable keys (DRKeys).

    pub mod v1 {
        //! Version 1 DRKey types.

        include!("proto/proto.drkey.v1.rs");
    }
}

pub mod daemon {
    //! Types and services for interacting with the SCION daemon (sciond).

    pub mod v1 {
        //! Version 1 sciond types and services.
        //!
        //! The primary entry point is the [daemon_service_client::DaemonServiceClient] that
        //! enables an application to query its local sciond service.

        include!("proto/proto.daemon.v1.rs");
    }
    pub use v1::daemon_service_client::DaemonServiceClient;
}

/// Types and services for interacting with the SCION control service.
pub mod control_plane {
    /// Experimental control plane types and services.
    pub mod experimental {
        /// Version 1 experimental control plane types and services.
        pub mod v1 {
            include!("proto/proto.control_plane.experimental.v1.rs");
        }
    }

    /// Version 1 control plane types and services.
    pub mod v1 {
        include!("proto/proto.control_plane.v1.rs");
    }
    pub use v1::segment_lookup_service_client::SegmentLookupServiceClient;
}

/// Types and services for SCION's crypto mechanisms.
pub mod crypto {
    /// Version 1 crypto types and services.
    pub mod v1 {
        include!("proto/proto.crypto.v1.rs");
    }
}
