Skip to content

Commit

Permalink
Yet another stub
Browse files Browse the repository at this point in the history
  • Loading branch information
nob13 committed Mar 25, 2023
1 parent df929bb commit b662a06
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 5 deletions.
@@ -0,0 +1,23 @@
package net.reactivecore.cjs.validator.impl

import net.reactivecore.cjs.validator.Validator
import shapeless._

/** Helper type class which is present when a validator V can be instantiated on
* one single value T
*/
trait TrivialValidationFieldProvider[T, V <: Validator] {
def provide(value: T): V
}

object TrivialValidationFieldProvider {

/** Generate from it, if the Validator class has only a single field.
* (Ok, that's a bit hacky)
*/
implicit def trivialValidationProvider[T, V <: Validator](
implicit generic: Generic.Aux[V, T :: HNil]
): TrivialValidationFieldProvider[T, V] = { value =>
generic.from(value :: HNil)
}
}
@@ -0,0 +1,18 @@
package net.reactivecore.cjs.validator.impl

import net.reactivecore.cjs.validator.Validator

/** Helper type class which is present when a validator V can be instantiated on
* one single value T
*/
trait TrivialValidationFieldProvider[T, V <: Validator] {
def provide(value: T): V
}

object TrivialValidationFieldProvider {

/** Generate from it, if the Validator class has only a single field.
* (Ok, that's a bit hacky)
*/
implicit def trivialValidationProvider[T, V <: Validator]: TrivialValidationFieldProvider[T, V] = ???
}
@@ -1,8 +1,8 @@
package net.reactivecore.cjs.restriction

import io.circe.{Codec, Decoder, Encoder}
import net.reactivecore.cjs.validator.impl.TrivialValidationFieldProvider
import net.reactivecore.cjs.validator.{ValidationProvider, Validator}
import shapeless._

/**
* A Single field inside a Restriction
Expand All @@ -14,11 +14,10 @@ case class ValidatingField[T, V](value: T) extends AnyVal

object ValidatingField {

/** Provides a validation provider for Validators which just take the value */
implicit def trivialValidationProvider[T, V <: Validator](
implicit generic: Generic.Aux[V, T :: HNil]
implicit def trivial[T, V <: Validator](
implicit t: TrivialValidationFieldProvider[T, V]
): ValidationProvider[ValidatingField[T, V]] = { (_, value) =>
generic.from(value.value :: HNil)
t.provide(value.value)
}

/** Empty validation providers for fields which do not have one. */
Expand Down

0 comments on commit b662a06

Please sign in to comment.