ppoppo-sdk-core 0.4.1

Internal shared primitives for the Ppoppo SDK family (pas-external, pas-plims, pcs-external) — verifier port, audit trait, session liveness port, OIDC discovery, perimeter Bearer-auth Layer kit, identity types. Not a stable public API; do not depend on this crate directly. Consume the SDK crates that re-export from it (e.g. `pas-external`).
Documentation
//! The gRPC-client mechanical arc shared by the Ppoppo gRPC SDK family
//! (`pas-plims`, `pcs-external`).
//!
//! sdk-core already owns three legs of "make an authenticated gRPC call to a
//! GKE path-prefixed ops face and classify the result" — the [`token_cache`],
//! the [`interceptor`], and the [`retry`] hint. This module adds the two
//! remaining legs so each SDK stops re-deriving them:
//!
//! - [`PathPrefixChannel`] — the transport leg (GKE Ingress path-prefix
//!   channel).
//! - [`Error`] + [`classify_status`] — the classification leg. Both SDKs
//!   re-export [`Error`] as their public error type and route every RPC
//!   failure through [`classify_status`], so the family's retry taxonomy
//!   (which `tonic::Code` is retryable vs terminal vs rate-limited) lives in
//!   exactly one place with one test suite.
//!
//! Gated on `grpc-client`. Reached via `ppoppo_sdk_core::grpc::*`; the gRPC
//! [`Error`] is intentionally **not** flat-re-exported at the crate root. A
//! bare root-level `Error` would read as sdk-core's *own* primitive error —
//! which is [`crate::error::SdkCoreError`] — so the `grpc::` path keeps the
//! "this is the gRPC client error, not sdk-core's primitive error" semantic
//! visible at the import site. Same module-path convention as the crate's
//! bearer/verifier split — though there the driver is a genuine same-name
//! clash (`bearer::VerifyError` vs `verifier::VerifyError`); here it is purely
//! that a root `Error` would misread (the names `Error`/`SdkCoreError` differ,
//! so there is no actual collision).
//!
//! [`token_cache`]: crate::token_cache
//! [`interceptor`]: crate::interceptor
//! [`retry`]: crate::retry

mod channel;
mod error;

pub use channel::PathPrefixChannel;
pub use error::{Error, classify_status};