All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pt.tecnico.dsi.openstack.nova.models.Keypair.scala Maven / Gradle / Ivy

package pt.tecnico.dsi.openstack.nova.models

import java.time.{LocalDateTime, OffsetDateTime}
import cats.derived.derived
import cats.derived.ShowPretty
import io.circe.derivation.{ConfiguredCodec, ConfiguredEncoder}
import io.circe.Encoder
import org.typelevel.cats.time.instances.offsetdatetime.given
import org.typelevel.cats.time.instances.localdatetime.given
import pt.tecnico.dsi.openstack.common.models.{Identifiable, Link}
import pt.tecnico.dsi.openstack.keystone.KeystoneClient
import pt.tecnico.dsi.openstack.keystone.models.User

object Keypair:
  final case class Summary(
    name: String,
    publicKey: String,
    fingerprint: String,
  ) derives ConfiguredCodec, ShowPretty
  
  final case class Create(
    name: String,
    userId: Option[String] = None,
  ) derives ConfiguredEncoder, ShowPretty
final case class Keypair(
  name: String,
  publicKey: String,
  fingerprint: String,
  deleted: Boolean = false,
  userId: String,
  createdAt: LocalDateTime,
  updatedAt: Option[OffsetDateTime] = None,
  deletedAt: Option[OffsetDateTime] = None,
) extends Identifiable derives ConfiguredCodec, ShowPretty {
  // In the API documentation "Show Keypair Details" has a field id, however that field isn't used in all the other rest
  // api operations: read and delete its by name, list doesn't show id. By subverting the id to mean name we at least
  // get to use the DeleteOperations in the service class
  override def id: String = name
  override def links: List[Link] = List.empty
  
  def user[F[_]](using keystone: KeystoneClient[F]): F[User] = keystone.users(userId)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy