class K8sPodLabelsAndAnnotationsSupplier implements Function<String, PodLabelsAndAnnotations> {

	private static final LogAccessor LOG = new LogAccessor(LogFactory.getLog(K8sPodLabelsAndAnnotationsSupplier.class));

	private final CoreV1Api coreV1Api;

	private final String namespace;

	private K8sPodLabelsAndAnnotationsSupplier(CoreV1Api coreV1Api, String namespace) {
		this.coreV1Api = coreV1Api;
		this.namespace = namespace;
	}

	/**
	 * to be used when .spec.type of the Service is != 'ExternalName'.
	 */
	static K8sPodLabelsAndAnnotationsSupplier nonExternalName(CoreV1Api coreV1Api, String namespace) {
		return new K8sPodLabelsAndAnnotationsSupplier(coreV1Api, namespace);
	}

	/**
	 * to be used when .spec.type of the Service is == 'ExternalName'.
	 */
	static K8sPodLabelsAndAnnotationsSupplier externalName() {
		return new K8sPodLabelsAndAnnotationsSupplier(null, null);
	}

	@Override
	public PodLabelsAndAnnotations apply(String podName) {<FILL_FUNCTION_BODY>}

}


		V1ObjectMeta objectMeta;

		try {
			objectMeta = Optional.ofNullable(coreV1Api.readNamespacedPod(podName, namespace, null).getMetadata())
					.orElse(new V1ObjectMetaBuilder().withLabels(Map.of()).withAnnotations(Map.of()).build());
		}
		catch (ApiException e) {
			LOG.warn(e, "Could not get pod metadata");
			objectMeta = new V1ObjectMetaBuilder().withLabels(Map.of()).withAnnotations(Map.of()).build();
		}

		return new PodLabelsAndAnnotations(Optional.ofNullable(objectMeta.getLabels()).orElse(Map.of()),
				Optional.ofNullable(objectMeta.getAnnotations()).orElse(Map.of()));
	
<no_super_class>