/// Request to get a vulnerability summary for some set of occurrences. #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetVulnerabilityOccurrencesSummaryRequest { /// The name of the project to get a vulnerability summary for in the form of /// `projects/\[PROJECT_ID\]`. #[prost(string, tag = "1")] pub parent: ::prost::alloc::string::String, /// The filter expression. #[prost(string, tag = "2")] pub filter: ::prost::alloc::string::String, } /// A summary of how many vulnerability occurrences there are per resource and /// severity type. #[derive(Clone, PartialEq, ::prost::Message)] pub struct VulnerabilityOccurrencesSummary { /// A listing by resource of the number of fixable and total vulnerabilities. #[prost(message, repeated, tag = "1")] pub counts: ::prost::alloc::vec::Vec, } /// Nested message and enum types in `VulnerabilityOccurrencesSummary`. pub mod vulnerability_occurrences_summary { /// Per resource and severity counts of fixable and total vulnerabilities. #[derive(Clone, PartialEq, ::prost::Message)] pub struct FixableTotalByDigest { /// The affected resource. #[prost(string, tag = "1")] pub resource_uri: ::prost::alloc::string::String, /// The severity for this count. SEVERITY_UNSPECIFIED indicates total across /// all severities. #[prost( enumeration = "super::super::super::super::super::grafeas::v1::Severity", tag = "2" )] pub severity: i32, /// The number of fixable vulnerabilities associated with this resource. #[prost(int64, tag = "3")] pub fixable_count: i64, /// The total number of vulnerabilities associated with this resource. #[prost(int64, tag = "4")] pub total_count: i64, } } #[doc = r" Generated client implementations."] pub mod container_analysis_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] use tonic::codegen::*; #[doc = " Retrieves analysis results of Cloud components such as Docker container"] #[doc = " images. The Container Analysis API is an implementation of the"] #[doc = " [Grafeas](https://grafeas.io) API."] #[doc = ""] #[doc = " Analysis results are stored as a series of occurrences. An `Occurrence`"] #[doc = " contains information about a specific analysis instance on a resource. An"] #[doc = " occurrence refers to a `Note`. A note contains details describing the"] #[doc = " analysis and is generally stored in a separate project, called a `Provider`."] #[doc = " Multiple occurrences can refer to the same note."] #[doc = ""] #[doc = " For example, an SSL vulnerability could affect multiple images. In this case,"] #[doc = " there would be one note for the vulnerability and an occurrence for each"] #[doc = " image with the vulnerability referring to that note."] #[derive(Debug, Clone)] pub struct ContainerAnalysisClient { inner: tonic::client::Grpc, } impl ContainerAnalysisClient where T: tonic::client::GrpcService, T::ResponseBody: Body + Send + 'static, T::Error: Into, ::Error: Into + Send, { pub fn new(inner: T) -> Self { let inner = tonic::client::Grpc::new(inner); Self { inner } } pub fn with_interceptor( inner: T, interceptor: F, ) -> ContainerAnalysisClient> where F: tonic::service::Interceptor, T: tonic::codegen::Service< http::Request, Response = http::Response< >::ResponseBody, >, >, >>::Error: Into + Send + Sync, { ContainerAnalysisClient::new(InterceptedService::new(inner, interceptor)) } #[doc = r" Compress requests with `gzip`."] #[doc = r""] #[doc = r" This requires the server to support it otherwise it might respond with an"] #[doc = r" error."] pub fn send_gzip(mut self) -> Self { self.inner = self.inner.send_gzip(); self } #[doc = r" Enable decompressing responses with `gzip`."] pub fn accept_gzip(mut self) -> Self { self.inner = self.inner.accept_gzip(); self } #[doc = " Sets the access control policy on the specified note or occurrence."] #[doc = " Requires `containeranalysis.notes.setIamPolicy` or"] #[doc = " `containeranalysis.occurrences.setIamPolicy` permission if the resource is"] #[doc = " a note or an occurrence, respectively."] #[doc = ""] #[doc = " The resource takes the format `projects/[PROJECT_ID]/notes/[NOTE_ID]` for"] #[doc = " notes and `projects/[PROJECT_ID]/occurrences/[OCCURRENCE_ID]` for"] #[doc = " occurrences."] pub async fn set_iam_policy( &mut self, request: impl tonic::IntoRequest, ) -> Result, tonic::Status> { self.inner.ready().await.map_err(|e| { tonic::Status::new( tonic::Code::Unknown, format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/google.devtools.containeranalysis.v1.ContainerAnalysis/SetIamPolicy", ); self.inner.unary(request.into_request(), path, codec).await } #[doc = " Gets the access control policy for a note or an occurrence resource."] #[doc = " Requires `containeranalysis.notes.setIamPolicy` or"] #[doc = " `containeranalysis.occurrences.setIamPolicy` permission if the resource is"] #[doc = " a note or occurrence, respectively."] #[doc = ""] #[doc = " The resource takes the format `projects/[PROJECT_ID]/notes/[NOTE_ID]` for"] #[doc = " notes and `projects/[PROJECT_ID]/occurrences/[OCCURRENCE_ID]` for"] #[doc = " occurrences."] pub async fn get_iam_policy( &mut self, request: impl tonic::IntoRequest, ) -> Result, tonic::Status> { self.inner.ready().await.map_err(|e| { tonic::Status::new( tonic::Code::Unknown, format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/google.devtools.containeranalysis.v1.ContainerAnalysis/GetIamPolicy", ); self.inner.unary(request.into_request(), path, codec).await } #[doc = " Returns the permissions that a caller has on the specified note or"] #[doc = " occurrence. Requires list permission on the project (for example,"] #[doc = " `containeranalysis.notes.list`)."] #[doc = ""] #[doc = " The resource takes the format `projects/[PROJECT_ID]/notes/[NOTE_ID]` for"] #[doc = " notes and `projects/[PROJECT_ID]/occurrences/[OCCURRENCE_ID]` for"] #[doc = " occurrences."] pub async fn test_iam_permissions( &mut self, request: impl tonic::IntoRequest< super::super::super::super::iam::v1::TestIamPermissionsRequest, >, ) -> Result< tonic::Response, tonic::Status, > { self.inner.ready().await.map_err(|e| { tonic::Status::new( tonic::Code::Unknown, format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/google.devtools.containeranalysis.v1.ContainerAnalysis/TestIamPermissions", ); self.inner.unary(request.into_request(), path, codec).await } #[doc = " Gets a summary of the number and severity of occurrences."] pub async fn get_vulnerability_occurrences_summary( &mut self, request: impl tonic::IntoRequest, ) -> Result, tonic::Status> { self.inner.ready().await.map_err(|e| { tonic::Status::new( tonic::Code::Unknown, format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic::codec::ProstCodec::default(); let path = http :: uri :: PathAndQuery :: from_static ("/google.devtools.containeranalysis.v1.ContainerAnalysis/GetVulnerabilityOccurrencesSummary") ; self.inner.unary(request.into_request(), path, codec).await } } }