Skip to content

Commit

Permalink
some attempts at a rudimentary matching with api-resources
Browse files Browse the repository at this point in the history
this is just a sketch. i think we definitely need to move this
generation code elsewhere. the flow right now is very hard to deal with
(script breaks => no output, so have to output into the output files
instead).

Signed-off-by: clux <[email protected]>
  • Loading branch information
clux committed Sep 15, 2021
1 parent 6c85ca6 commit 159d347
Show file tree
Hide file tree
Showing 64 changed files with 252 additions and 66 deletions.
2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,5 @@ prost = "0.8.0"
prost-build = "0.8.0"
prost-types = "0.8.0"
prost = "0.8.0"
serde_json = "1.0.67"
serde = { version = "1.0.130", features = ["derive"] }
98 changes: 94 additions & 4 deletions build.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,72 @@
use prost_types::{FileDescriptorProto, FileDescriptorSet};
use prost::Message;

// codify structs in api-resource.json
// this is the root struct (we have a vector of them)
#[derive(serde::Deserialize)]
struct GenApiGroupResources {
apiGroupVersion: String,
resources: Vec<GenApiResource>
}
// main resource struct
#[derive(serde::Deserialize)]
struct GenApiResource {
/// plural name
name: String,
#[serde(default)]
namespaced: bool,
subresource: bool,
/// apigroup/ver
apiGroupVersion: String,
/// apigroup
group: String,
/// ver
version: String,
kind: String,
/// expected module path :: delimited
rust: String,
/// allowed verbs
verbs: Vec<String>,
scopedVerbs: ScopedVerbs,
/// vec of found root paths
///
/// "/apis/apps/v1/controllerrevisions",
/// "/apis/apps/v1/namespaces/{namespace}/controllerrevisions",
/// "/apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}"
paths: Vec<String>,
}
#[derive(serde::Deserialize)]
struct ScopedVerbs {
#[serde(default)]
all: Vec<String>,
#[serde(default)]
namespaced: Vec<String>,
}

impl GenApiResource {
fn generics(&self) -> String {
format!("// TODO generics for {} {}", self.name, self.apiGroupVersion)
}
}

fn pkgname_to_api_key(pkg: &str) -> Option<String> {
// TODO: this function is dumb. we probably need to have a better key in the root object than apiGroupVersion
// otherwise we'd have to match up weird paths like api.storage.v1 -> storage.k8s.io/v1
if let Some((catpth, ver)) = pkg.rsplit_once(".") {
if let Some((category, pth)) = catpth.split_once(".") {
match category {
"api" => Some(format!("{}/{}", pth, ver)),
_ => None,
}
} else {
None
}
} else {
None
}
}


fn main() -> std::io::Result<()> {
let protos = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/protos.list"))
.lines()
Expand All @@ -12,7 +78,8 @@ fn main() -> std::io::Result<()> {
.out_dir("./out")
.compile_protos(protos.as_slice(), &["protos/"])?;

let apis = std::fs::read_to_string("./openapi/api-resources.json")?;
let apif = std::fs::read_to_string("./openapi/api-resources.json")?;
let apis: Vec<GenApiGroupResources> = serde_json::from_str(&apif)?;

let buf = std::fs::read("./protos.fds").unwrap();
let fds = FileDescriptorSet::decode(&*buf).unwrap(); // pulls in proto::Message
Expand All @@ -23,9 +90,32 @@ fn main() -> std::io::Result<()> {
use std::io::Write;
if let Some(pkg) = f.package {
let pkgpath = std::path::Path::new("./out").join(format!("{}.rs", pkg));
let generics = format!("// TODO genericsfor {}\n", pkg);
let mut file = std::fs::OpenOptions::new().write(true).append(true).open(&pkgpath)?;
file.write(generics.as_bytes())?;
// match the pkg name to a key in api-resources.json
if let Some(apikey) = pkgname_to_api_key(&pkg) {
let mut codegen = vec![];
// find the corresponding apiGroupVersion
if let Some(apigr) = apis.iter().find(|ag| ag.apiGroupVersion == apikey) {
for dp in f.message_type {
if let Some(name) = dp.name {
if name.ends_with("List") {
continue;
}
// find the inner resource with matching kind name
if let Some(api) = apigr.resources.iter().find(|gr| name == gr.kind) {
codegen.push(api.generics());
} else {
codegen.push(format!("// NB: no-generics for {}/{} (not in {})", pkg, name, apikey));
}
}
}
} else {
codegen.push(format!("// didn't find {}", apikey));
}
let generics = codegen.join("\n");
let mut file = std::fs::OpenOptions::new().write(true).append(true).open(&pkgpath)?;
file.write(generics.as_bytes())?;

}
}
}

Expand Down
2 changes: 1 addition & 1 deletion out/api.admission.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,4 @@ pub struct AdmissionReview {
#[prost(message, optional, tag="2")]
pub response: ::core::option::Option<AdmissionResponse>,
}
// TODO genericsfor api.admission.v1
// didn't find admission/v1
2 changes: 1 addition & 1 deletion out/api.admission.v1beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,4 @@ pub struct AdmissionReview {
#[prost(message, optional, tag="2")]
pub response: ::core::option::Option<AdmissionResponse>,
}
// TODO genericsfor api.admission.v1beta1
// didn't find admission/v1beta1
2 changes: 1 addition & 1 deletion out/api.admissionregistration.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -457,4 +457,4 @@ pub struct WebhookClientConfig {
#[prost(bytes="vec", optional, tag="2")]
pub ca_bundle: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
// TODO genericsfor api.admissionregistration.v1
// didn't find admissionregistration/v1
2 changes: 1 addition & 1 deletion out/api.admissionregistration.v1beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -465,4 +465,4 @@ pub struct WebhookClientConfig {
#[prost(bytes="vec", optional, tag="2")]
pub ca_bundle: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
}
// TODO genericsfor api.admissionregistration.v1beta1
// didn't find admissionregistration/v1beta1
2 changes: 1 addition & 1 deletion out/api.apiserverinternal.v1alpha1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,4 @@ pub struct StorageVersionStatus {
#[prost(message, repeated, tag="3")]
pub conditions: ::prost::alloc::vec::Vec<StorageVersionCondition>,
}
// TODO genericsfor api.apiserverinternal.v1alpha1
// didn't find apiserverinternal/v1alpha1
24 changes: 23 additions & 1 deletion out/api.apps.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -737,4 +737,26 @@ pub struct StatefulSetUpdateStrategy {
#[prost(message, optional, tag="2")]
pub rolling_update: ::core::option::Option<RollingUpdateStatefulSetStrategy>,
}
// TODO genericsfor api.apps.v1
// TODO generics for controllerrevisions apps/v1
// TODO generics for daemonsets apps/v1
// NB: no-generics for api.apps.v1/DaemonSetCondition (not in apps/v1)
// NB: no-generics for api.apps.v1/DaemonSetSpec (not in apps/v1)
// NB: no-generics for api.apps.v1/DaemonSetStatus (not in apps/v1)
// NB: no-generics for api.apps.v1/DaemonSetUpdateStrategy (not in apps/v1)
// TODO generics for deployments apps/v1
// NB: no-generics for api.apps.v1/DeploymentCondition (not in apps/v1)
// NB: no-generics for api.apps.v1/DeploymentSpec (not in apps/v1)
// NB: no-generics for api.apps.v1/DeploymentStatus (not in apps/v1)
// NB: no-generics for api.apps.v1/DeploymentStrategy (not in apps/v1)
// TODO generics for replicasets apps/v1
// NB: no-generics for api.apps.v1/ReplicaSetCondition (not in apps/v1)
// NB: no-generics for api.apps.v1/ReplicaSetSpec (not in apps/v1)
// NB: no-generics for api.apps.v1/ReplicaSetStatus (not in apps/v1)
// NB: no-generics for api.apps.v1/RollingUpdateDaemonSet (not in apps/v1)
// NB: no-generics for api.apps.v1/RollingUpdateDeployment (not in apps/v1)
// NB: no-generics for api.apps.v1/RollingUpdateStatefulSetStrategy (not in apps/v1)
// TODO generics for statefulsets apps/v1
// NB: no-generics for api.apps.v1/StatefulSetCondition (not in apps/v1)
// NB: no-generics for api.apps.v1/StatefulSetSpec (not in apps/v1)
// NB: no-generics for api.apps.v1/StatefulSetStatus (not in apps/v1)
// NB: no-generics for api.apps.v1/StatefulSetUpdateStrategy (not in apps/v1)
2 changes: 1 addition & 1 deletion out/api.apps.v1beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -484,4 +484,4 @@ pub struct StatefulSetUpdateStrategy {
#[prost(message, optional, tag="2")]
pub rolling_update: ::core::option::Option<RollingUpdateStatefulSetStrategy>,
}
// TODO genericsfor api.apps.v1beta1
// didn't find apps/v1beta1
2 changes: 1 addition & 1 deletion out/api.apps.v1beta2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -785,4 +785,4 @@ pub struct StatefulSetUpdateStrategy {
#[prost(message, optional, tag="2")]
pub rolling_update: ::core::option::Option<RollingUpdateStatefulSetStrategy>,
}
// TODO genericsfor api.apps.v1beta2
// didn't find apps/v1beta2
2 changes: 1 addition & 1 deletion out/api.authentication.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,4 @@ pub struct UserInfo {
#[prost(map="string, message", tag="4")]
pub extra: ::std::collections::HashMap<::prost::alloc::string::String, ExtraValue>,
}
// TODO genericsfor api.authentication.v1
// didn't find authentication/v1
2 changes: 1 addition & 1 deletion out/api.authentication.v1beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,4 @@ pub struct UserInfo {
#[prost(map="string, message", tag="4")]
pub extra: ::std::collections::HashMap<::prost::alloc::string::String, ExtraValue>,
}
// TODO genericsfor api.authentication.v1beta1
// didn't find authentication/v1beta1
2 changes: 1 addition & 1 deletion out/api.authorization.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -263,4 +263,4 @@ pub struct SubjectRulesReviewStatus {
#[prost(string, optional, tag="4")]
pub evaluation_error: ::core::option::Option<::prost::alloc::string::String>,
}
// TODO genericsfor api.authorization.v1
// didn't find authorization/v1
2 changes: 1 addition & 1 deletion out/api.authorization.v1beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -263,4 +263,4 @@ pub struct SubjectRulesReviewStatus {
#[prost(string, optional, tag="4")]
pub evaluation_error: ::core::option::Option<::prost::alloc::string::String>,
}
// TODO genericsfor api.authorization.v1beta1
// didn't find authorization/v1beta1
21 changes: 20 additions & 1 deletion out/api.autoscaling.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -482,4 +482,23 @@ pub struct ScaleStatus {
#[prost(string, optional, tag="2")]
pub selector: ::core::option::Option<::prost::alloc::string::String>,
}
// TODO genericsfor api.autoscaling.v1
// NB: no-generics for api.autoscaling.v1/ContainerResourceMetricSource (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/ContainerResourceMetricStatus (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/CrossVersionObjectReference (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/ExternalMetricSource (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/ExternalMetricStatus (not in autoscaling/v1)
// TODO generics for horizontalpodautoscalers autoscaling/v1
// NB: no-generics for api.autoscaling.v1/HorizontalPodAutoscalerCondition (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/HorizontalPodAutoscalerSpec (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/HorizontalPodAutoscalerStatus (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/MetricSpec (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/MetricStatus (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/ObjectMetricSource (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/ObjectMetricStatus (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/PodsMetricSource (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/PodsMetricStatus (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/ResourceMetricSource (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/ResourceMetricStatus (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/Scale (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/ScaleSpec (not in autoscaling/v1)
// NB: no-generics for api.autoscaling.v1/ScaleStatus (not in autoscaling/v1)
18 changes: 17 additions & 1 deletion out/api.autoscaling.v2beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -459,4 +459,20 @@ pub struct ResourceMetricStatus {
#[prost(message, optional, tag="3")]
pub current_average_value: ::core::option::Option<super::super::super::apimachinery::pkg::api::resource::Quantity>,
}
// TODO genericsfor api.autoscaling.v2beta1
// NB: no-generics for api.autoscaling.v2beta1/ContainerResourceMetricSource (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/ContainerResourceMetricStatus (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/CrossVersionObjectReference (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/ExternalMetricSource (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/ExternalMetricStatus (not in autoscaling/v2beta1)
// TODO generics for horizontalpodautoscalers autoscaling/v2beta1
// NB: no-generics for api.autoscaling.v2beta1/HorizontalPodAutoscalerCondition (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/HorizontalPodAutoscalerSpec (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/HorizontalPodAutoscalerStatus (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/MetricSpec (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/MetricStatus (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/ObjectMetricSource (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/ObjectMetricStatus (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/PodsMetricSource (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/PodsMetricStatus (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/ResourceMetricSource (not in autoscaling/v2beta1)
// NB: no-generics for api.autoscaling.v2beta1/ResourceMetricStatus (not in autoscaling/v2beta1)
24 changes: 23 additions & 1 deletion out/api.autoscaling.v2beta2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -483,4 +483,26 @@ pub struct ResourceMetricStatus {
#[prost(message, optional, tag="2")]
pub current: ::core::option::Option<MetricValueStatus>,
}
// TODO genericsfor api.autoscaling.v2beta2
// NB: no-generics for api.autoscaling.v2beta2/ContainerResourceMetricSource (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/ContainerResourceMetricStatus (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/CrossVersionObjectReference (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/ExternalMetricSource (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/ExternalMetricStatus (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/HPAScalingPolicy (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/HPAScalingRules (not in autoscaling/v2beta2)
// TODO generics for horizontalpodautoscalers autoscaling/v2beta2
// NB: no-generics for api.autoscaling.v2beta2/HorizontalPodAutoscalerBehavior (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/HorizontalPodAutoscalerCondition (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/HorizontalPodAutoscalerSpec (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/HorizontalPodAutoscalerStatus (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/MetricIdentifier (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/MetricSpec (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/MetricStatus (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/MetricTarget (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/MetricValueStatus (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/ObjectMetricSource (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/ObjectMetricStatus (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/PodsMetricSource (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/PodsMetricStatus (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/ResourceMetricSource (not in autoscaling/v2beta2)
// NB: no-generics for api.autoscaling.v2beta2/ResourceMetricStatus (not in autoscaling/v2beta2)
10 changes: 9 additions & 1 deletion out/api.batch.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -348,4 +348,12 @@ pub struct UncountedTerminatedPods {
#[prost(string, repeated, tag="2")]
pub failed: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
// TODO genericsfor api.batch.v1
// TODO generics for cronjobs batch/v1
// NB: no-generics for api.batch.v1/CronJobSpec (not in batch/v1)
// NB: no-generics for api.batch.v1/CronJobStatus (not in batch/v1)
// TODO generics for jobs batch/v1
// NB: no-generics for api.batch.v1/JobCondition (not in batch/v1)
// NB: no-generics for api.batch.v1/JobSpec (not in batch/v1)
// NB: no-generics for api.batch.v1/JobStatus (not in batch/v1)
// NB: no-generics for api.batch.v1/JobTemplateSpec (not in batch/v1)
// NB: no-generics for api.batch.v1/UncountedTerminatedPods (not in batch/v1)
6 changes: 5 additions & 1 deletion out/api.batch.v1beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,8 @@ pub struct JobTemplateSpec {
#[prost(message, optional, tag="2")]
pub spec: ::core::option::Option<super::v1::JobSpec>,
}
// TODO genericsfor api.batch.v1beta1
// TODO generics for cronjobs batch/v1beta1
// NB: no-generics for api.batch.v1beta1/CronJobSpec (not in batch/v1beta1)
// NB: no-generics for api.batch.v1beta1/CronJobStatus (not in batch/v1beta1)
// NB: no-generics for api.batch.v1beta1/JobTemplate (not in batch/v1beta1)
// NB: no-generics for api.batch.v1beta1/JobTemplateSpec (not in batch/v1beta1)
2 changes: 1 addition & 1 deletion out/api.certificates.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -223,4 +223,4 @@ pub struct ExtraValue {
#[prost(string, repeated, tag="1")]
pub items: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
// TODO genericsfor api.certificates.v1
// didn't find certificates/v1
2 changes: 1 addition & 1 deletion out/api.certificates.v1beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,4 @@ pub struct ExtraValue {
#[prost(string, repeated, tag="1")]
pub items: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
// TODO genericsfor api.certificates.v1beta1
// didn't find certificates/v1beta1
2 changes: 1 addition & 1 deletion out/api.coordination.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,4 @@ pub struct LeaseSpec {
#[prost(int32, optional, tag="5")]
pub lease_transitions: ::core::option::Option<i32>,
}
// TODO genericsfor api.coordination.v1
// didn't find coordination/v1
2 changes: 1 addition & 1 deletion out/api.coordination.v1beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,4 @@ pub struct LeaseSpec {
#[prost(int32, optional, tag="5")]
pub lease_transitions: ::core::option::Option<i32>,
}
// TODO genericsfor api.coordination.v1beta1
// didn't find coordination/v1beta1
2 changes: 1 addition & 1 deletion out/api.core.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5824,4 +5824,4 @@ pub struct WindowsSecurityContextOptions {
#[prost(bool, optional, tag="4")]
pub host_process: ::core::option::Option<bool>,
}
// TODO genericsfor api.core.v1
// didn't find core/v1
2 changes: 1 addition & 1 deletion out/api.discovery.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -171,4 +171,4 @@ pub struct ForZone {
#[prost(string, optional, tag="1")]
pub name: ::core::option::Option<::prost::alloc::string::String>,
}
// TODO genericsfor api.discovery.v1
// didn't find discovery/v1
2 changes: 1 addition & 1 deletion out/api.discovery.v1beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,4 @@ pub struct ForZone {
#[prost(string, optional, tag="1")]
pub name: ::core::option::Option<::prost::alloc::string::String>,
}
// TODO genericsfor api.discovery.v1beta1
// didn't find discovery/v1beta1
2 changes: 1 addition & 1 deletion out/api.events.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,4 @@ pub struct EventSeries {
#[prost(message, optional, tag="2")]
pub last_observed_time: ::core::option::Option<super::super::super::apimachinery::pkg::apis::meta::v1::MicroTime>,
}
// TODO genericsfor api.events.v1
// didn't find events/v1
2 changes: 1 addition & 1 deletion out/api.events.v1beta1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,4 +100,4 @@ pub struct EventSeries {
#[prost(message, optional, tag="2")]
pub last_observed_time: ::core::option::Option<super::super::super::apimachinery::pkg::apis::meta::v1::MicroTime>,
}
// TODO genericsfor api.events.v1beta1
// didn't find events/v1beta1
Loading

0 comments on commit 159d347

Please sign in to comment.