Client implementation
The generated code is just a facade on the generic Kubernetes client implementations that are hand-written in the zio-k8s-client subproject.
In this section we will go through the building blocks of the generic part and see their purpose.
trait Resource[T]is the base interface for manipulating Kubernetes resources. It is independent from whether the resource is namespaced or cluster level.trait NamespacedResource[T]andtrait ClusterResource[T]define more type safe and convenient interfaces for the same thing, by having non-optional namespace parameters or not having namespace parameters at all, according to the semantics of the resource.trait ResourceClientBaseholds some common functionality for all resource client implementations (resources, statuses, other subresources)final class ResourceClient[T: K8sObject: Encoder: Decoder]is the generic Kubernetes client impementation, implementingResource[T]
Following the same logic we have ResourceStatus[StatusT, T] and its narrowed versions, NamespacedResourceStatus and ClusterResourceStatus with the implementation class ResourceStatusClient, and also for subresources Subresource and SubresourceClient.
For subresources the narrowed versions are not generic but being generated in by the code generator, because they also introduce a subresource-specific alias for the operations implemented by the base trait, such as getScale vs getLog. This is necessary to be able to create unified resource interfaces with all the supported subresources mixed together.
