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

otrellis.geotrellis-server-stac_2.12.4.2.0.source-code.StacLinkType.scala Maven / Gradle / Ivy

Go to download

GeoTrellis Server is a set of components designed to simplify viewing, processing, and serving raster data from arbitrary sources with an emphasis on doing so in a functional style.

The newest version!
/*
 * Copyright 2020 Azavea
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package geotrellis.server.stac

import cats.implicits._
import io.circe._

sealed abstract class StacLinkType(val repr: String) {
  override def toString = repr
}
case object Self extends StacLinkType("self")
case object StacRoot extends StacLinkType("root")
case object Parent extends StacLinkType("parent")
case object Child extends StacLinkType("child")
case object Item extends StacLinkType("item")
case object Items extends StacLinkType("items")
case object Source extends StacLinkType("source")
case object Collection extends StacLinkType("collection")
case object License extends StacLinkType("license")
case object Alternate extends StacLinkType("alternate")
case object DescribedBy extends StacLinkType("describedBy")
case object Next extends StacLinkType("next")
case object Prev extends StacLinkType("prev")
case object ServiceDesc extends StacLinkType("service-desc")
case object ServiceDoc extends StacLinkType("service-doc")
case object Conformance extends StacLinkType("conformance")
case object Data extends StacLinkType("data")
case class VendorLinkType(underlying: String) extends StacLinkType("vendor") {
  override def toString = s"$repr-$underlying"
}

object StacLinkType {

  private def fromString(s: String): StacLinkType = s.toLowerCase match {
    case "self"         => Self
    case "root"         => StacRoot
    case "parent"       => Parent
    case "child"        => Child
    case "item"         => Item
    case "items"        => Items
    case "alternate"    => Alternate
    case "collection"   => Collection
    case "describedby"  => DescribedBy
    case "next"         => Next
    case "license"      => License
    case "prev"         => Prev
    case "service-desc" => ServiceDesc
    case "service-doc"  => ServiceDoc
    case "conformance"  => Conformance
    case "data"         => Data
    case "source"       => Source
    case s              => VendorLinkType(s)
  }

  implicit val encStacLinkType: Encoder[StacLinkType] =
    Encoder.encodeString.contramap[StacLinkType](_.toString)
  implicit val decStacLinkType: Decoder[StacLinkType] =
    Decoder.decodeString.emap { str =>
      Either.catchNonFatal(fromString(str)).leftMap(_ => "StacLinkType")
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy