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

com.github.andyglow.json.ValueSchema.scala Maven / Gradle / Ivy

package com.github.andyglow.json

import json.Schema
import json.Schema._

sealed trait ValueSchema[T] {
  type S
  def schema: json.Schema[S]
}

object ValueSchema {

  implicit val schemaForStr: ValueSchema[Value.str] = new ValueSchema[Value.str] {
    override type S = String
    override def schema: Schema[S] = `string`
  }

  implicit val schemaForNum: ValueSchema[Value.num] = new ValueSchema[Value.num] {
    override type S = Long
    override def schema: Schema[S] = `number`[S]
  }

  implicit val schemaForBool: ValueSchema[Value.bool] = new ValueSchema[Value.bool] {
    override type S = Boolean
    override def schema: Schema[S] = `boolean`
  }

  implicit val schemaForString: ValueSchema[String] = new ValueSchema[String] {
    override type S = String
    override def schema: Schema[S] = `string`
  }

  implicit val schemaForInteger: ValueSchema[Int] = new ValueSchema[Int] {
    override type S = Int
    override def schema: Schema[S] = `integer`
  }

  implicit val schemaForLong: ValueSchema[Long] = new ValueSchema[Long] {
    override type S = Int
    override def schema: Schema[S] = `integer`
  }

  implicit val schemaForByte: ValueSchema[Byte] = new ValueSchema[Byte] {
    override type S = Int
    override def schema: Schema[S] = `integer`
  }

  implicit val schemaForShort: ValueSchema[Short] = new ValueSchema[Short] {
    override type S = Int
    override def schema: Schema[S] = `integer`
  }

  implicit def schemaForNumeric[T: Numeric]: ValueSchema[T] = new ValueSchema[T] {
    override type S = T
    override def schema: Schema[S] = `number`[S]
  }

  implicit val schemaForBoolean: ValueSchema[Boolean] = new ValueSchema[Boolean] {
    override type S = Boolean
    override def schema: Schema[S] = `boolean`
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy