Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,8 @@ lazy val core = projectMatrix
ProblemFilters.exclude[MissingClassProblem]("alloy.proto.ProtoCompactOffsetDateTime"),
// originating in an Alloy update that removed ProtoCompactOffsetDateTime
ProblemFilters.exclude[MissingClassProblem]("alloy.proto.ProtoCompactOffsetDateTime$"),
// private class that got removed
ProblemFilters.exclude[MissingClassProblem]("smithy4s.Validator$ValidatorImpl")
)
)
.jvmPlatform(allJvmScalaVersions, jvmDimSettings)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.schema.Schema.string

object AccountId extends ValidatedNewtype[String] {
val id: ShapeId = ShapeId("smithy4s.example", "AccountId")
val hints: Hints = Hints.empty
val underlyingSchema: Schema[String] = string.withId(id).addHints(hints).validated(smithy.api.Pattern("[a-zA-Z0-9]+"))
val validator: Validator[String, AccountId] = Validator.Builder.simple[String].validating(smithy.api.Pattern("[a-zA-Z0-9]+")).biject(Bijection[String, AccountId](_.asInstanceOf[AccountId], value(_))).build()
implicit val schema: Schema[AccountId] = validator.toSchema(underlyingSchema)
@inline def apply(a: String): Either[String, AccountId] = validator.validate(a)
}
18 changes: 18 additions & 0 deletions modules/bootstrapped/src/generated/smithy4s/example/DeviceId.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.schema.Schema.string

object DeviceId extends ValidatedNewtype[String] {
val id: ShapeId = ShapeId("smithy4s.example", "DeviceId")
val hints: Hints = Hints.empty
val underlyingSchema: Schema[String] = string.withId(id).addHints(hints).validated(smithy.api.Length(min = Some(1L), max = None))
val validator: Validator[String, DeviceId] = Validator.Builder.simple[String].validating(smithy.api.Length(min = Some(1L), max = None)).biject(Bijection[String, DeviceId](_.asInstanceOf[DeviceId], value(_))).build()
implicit val schema: Schema[DeviceId] = validator.toSchema(underlyingSchema)
@inline def apply(a: String): Either[String, DeviceId] = validator.validate(a)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.schema.Schema.indexedSeq
import smithy4s.schema.Schema.string

object ValidatedConstrainedIndexedSeqConstrainedMember extends ValidatedNewtype[IndexedSeq[String]] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedConstrainedIndexedSeqConstrainedMember")
val hints: Hints = Hints.empty
val underlyingSchema: Schema[IndexedSeq[String]] = indexedSeq(string.addMemberHints().validated(smithy.api.Length(min = None, max = Some(2L)))).withId(id).addHints(hints).validated(smithy.api.Length(min = None, max = Some(1L)))
val validator: Validator[IndexedSeq[String], ValidatedConstrainedIndexedSeqConstrainedMember] = Validator.Builder.indexedSeq[String].validating(smithy.api.Length(min = None, max = Some(1L))).validatingMember(smithy.api.Length(min = None, max = Some(2L))).biject(Bijection[IndexedSeq[String], ValidatedConstrainedIndexedSeqConstrainedMember](_.asInstanceOf[ValidatedConstrainedIndexedSeqConstrainedMember], value(_))).build()
implicit val schema: Schema[ValidatedConstrainedIndexedSeqConstrainedMember] = validator.toSchema(underlyingSchema)
@inline def apply(a: IndexedSeq[String]): Either[String, ValidatedConstrainedIndexedSeqConstrainedMember] = validator.validate(a)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.schema.Schema.list
import smithy4s.schema.Schema.string

object ValidatedConstrainedList extends ValidatedNewtype[List[String]] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedConstrainedList")
val hints: Hints = Hints.empty
val underlyingSchema: Schema[List[String]] = list(string).withId(id).addHints(hints).validated(smithy.api.Length(min = None, max = Some(1L)))
val validator: Validator[List[String], ValidatedConstrainedList] = Validator.Builder.list[String].validating(smithy.api.Length(min = None, max = Some(1L))).biject(Bijection[List[String], ValidatedConstrainedList](_.asInstanceOf[ValidatedConstrainedList], value(_))).build()
implicit val schema: Schema[ValidatedConstrainedList] = validator.toSchema(underlyingSchema)
@inline def apply(a: List[String]): Either[String, ValidatedConstrainedList] = validator.validate(a)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.schema.Schema.list

object ValidatedConstrainedListRefinedMember extends ValidatedNewtype[List[Name]] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedConstrainedListRefinedMember")
val hints: Hints = Hints.empty
val underlyingSchema: Schema[List[Name]] = list(Name.schema).withId(id).addHints(hints).validated(smithy.api.Length(min = None, max = Some(1L)))
val validator: Validator[List[Name], ValidatedConstrainedListRefinedMember] = Validator.Builder.list[Name].validating(smithy.api.Length(min = None, max = Some(1L))).biject(Bijection[List[Name], ValidatedConstrainedListRefinedMember](_.asInstanceOf[ValidatedConstrainedListRefinedMember], value(_))).build()
implicit val schema: Schema[ValidatedConstrainedListRefinedMember] = validator.toSchema(underlyingSchema)
@inline def apply(a: List[Name]): Either[String, ValidatedConstrainedListRefinedMember] = validator.validate(a)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.schema.Schema.int
import smithy4s.schema.Schema.map
import smithy4s.schema.Schema.string

object ValidatedConstrainedMap extends ValidatedNewtype[Map[String, Int]] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedConstrainedMap")
val hints: Hints = Hints.empty
val underlyingSchema: Schema[Map[String, Int]] = map(string, int).withId(id).addHints(hints).validated(smithy.api.Length(min = None, max = Some(1L)))
val validator: Validator[Map[String, Int], ValidatedConstrainedMap] = Validator.Builder.map[String, Int].validating(smithy.api.Length(min = None, max = Some(1L))).biject(Bijection[Map[String, Int], ValidatedConstrainedMap](_.asInstanceOf[ValidatedConstrainedMap], value(_))).build()
implicit val schema: Schema[ValidatedConstrainedMap] = validator.toSchema(underlyingSchema)
@inline def apply(a: Map[String, Int]): Either[String, ValidatedConstrainedMap] = validator.validate(a)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.example.instances._
import smithy4s.schema.Schema.vector


object ValidatedConstrainedVectorRefinedConstrainedMember extends ValidatedNewtype[Vector[Name]] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedConstrainedVectorRefinedConstrainedMember")
val hints: Hints = Hints.empty
val underlyingSchema: Schema[Vector[Name]] = vector(Name.schema.addMemberHints().validated(smithy.api.Length(min = None, max = Some(2L)))).withId(id).addHints(hints).validated(smithy.api.Length(min = None, max = Some(1L)))
val validator: Validator[Vector[Name], ValidatedConstrainedVectorRefinedConstrainedMember] = Validator.Builder.vector[Name].validating(smithy.api.Length(min = None, max = Some(1L))).validatingMember(smithy.api.Length(min = None, max = Some(2L))).biject(Bijection[Vector[Name], ValidatedConstrainedVectorRefinedConstrainedMember](_.asInstanceOf[ValidatedConstrainedVectorRefinedConstrainedMember], value(_))).build()
implicit val schema: Schema[ValidatedConstrainedVectorRefinedConstrainedMember] = validator.toSchema(underlyingSchema)
@inline def apply(a: Vector[Name]): Either[String, ValidatedConstrainedVectorRefinedConstrainedMember] = validator.validate(a)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.schema.Schema.int
import smithy4s.schema.Schema.map
import smithy4s.schema.Schema.string

object ValidatedMapConstrainedKey extends ValidatedNewtype[Map[String, Int]] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedMapConstrainedKey")
val hints: Hints = Hints.empty
val underlyingSchema: Schema[Map[String, Int]] = map(string.addMemberHints().validated(smithy.api.Length(min = None, max = Some(2L))), int).withId(id).addHints(hints)
val validator: Validator[Map[String, Int], ValidatedMapConstrainedKey] = Validator.Builder.map[String, Int].validatingKey(smithy.api.Length(min = None, max = Some(2L))).biject(Bijection[Map[String, Int], ValidatedMapConstrainedKey](_.asInstanceOf[ValidatedMapConstrainedKey], value(_))).build()
implicit val schema: Schema[ValidatedMapConstrainedKey] = validator.toSchema(underlyingSchema)
@inline def apply(a: Map[String, Int]): Either[String, ValidatedMapConstrainedKey] = validator.validate(a)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.schema.Schema.map
import smithy4s.schema.Schema.string

object ValidatedMapConstrainedValue extends ValidatedNewtype[Map[String, String]] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedMapConstrainedValue")
val hints: Hints = Hints.empty
val underlyingSchema: Schema[Map[String, String]] = map(string, string.addMemberHints().validated(smithy.api.Pattern(s"^[a-zA-Z0-9]+$$"))).withId(id).addHints(hints)
val validator: Validator[Map[String, String], ValidatedMapConstrainedValue] = Validator.Builder.map[String, String].validatingValue(smithy.api.Pattern(s"^[a-zA-Z0-9]+$$")).biject(Bijection[Map[String, String], ValidatedMapConstrainedValue](_.asInstanceOf[ValidatedMapConstrainedValue], value(_))).build()
implicit val schema: Schema[ValidatedMapConstrainedValue] = validator.toSchema(underlyingSchema)
@inline def apply(a: Map[String, String]): Either[String, ValidatedMapConstrainedValue] = validator.validate(a)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.refined.NonEmptyList
import smithy4s.schema.Schema.list
import smithy4s.schema.Schema.string

object ValidatedRefinedList extends ValidatedNewtype[NonEmptyList[String]] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedRefinedList")
val hints: Hints = Hints(
smithy4s.example.NonEmptyListFormat(),
).lazily
val underlyingSchema: Schema[NonEmptyList[String]] = list(string).refined[NonEmptyList[String]](smithy4s.example.NonEmptyListFormat()).withId(id).addHints(hints)
val validator: Validator[NonEmptyList[String], ValidatedRefinedList] = Validator.Builder.list[String].refined[NonEmptyList[String]](smithy4s.example.NonEmptyListFormat()).biject(Bijection[NonEmptyList[String], ValidatedRefinedList](_.asInstanceOf[ValidatedRefinedList], value(_))).build()
implicit val schema: Schema[ValidatedRefinedList] = validator.toSchema(underlyingSchema)
@inline def apply(a: NonEmptyList[String]): Either[String, ValidatedRefinedList] = validator.validate(a)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.refined.NonEmptyList
import smithy4s.schema.Schema.list
import smithy4s.schema.Schema.string

object ValidatedRefinedListConstrainedMember extends ValidatedNewtype[NonEmptyList[String]] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedRefinedListConstrainedMember")
val hints: Hints = Hints(
smithy4s.example.NonEmptyListFormat(),
).lazily
val underlyingSchema: Schema[NonEmptyList[String]] = list(string.addMemberHints().validated(smithy.api.Length(min = None, max = Some(2L)))).refined[NonEmptyList[String]](smithy4s.example.NonEmptyListFormat()).withId(id).addHints(hints)
val validator: Validator[NonEmptyList[String], ValidatedRefinedListConstrainedMember] = Validator.Builder.list[String].validatingMember(smithy.api.Length(min = None, max = Some(2L))).refined[NonEmptyList[String]](smithy4s.example.NonEmptyListFormat()).biject(Bijection[NonEmptyList[String], ValidatedRefinedListConstrainedMember](_.asInstanceOf[ValidatedRefinedListConstrainedMember], value(_))).build()
implicit val schema: Schema[ValidatedRefinedListConstrainedMember] = validator.toSchema(underlyingSchema)
@inline def apply(a: NonEmptyList[String]): Either[String, ValidatedRefinedListConstrainedMember] = validator.validate(a)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package smithy4s.example

import smithy4s.Bijection
import smithy4s.Hints
import smithy4s.Schema
import smithy4s.ShapeId
import smithy4s.ValidatedNewtype
import smithy4s.Validator
import smithy4s.schema.Schema.set
import smithy4s.schema.Schema.string

object ValidatedSetConstrainedMember extends ValidatedNewtype[Set[String]] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedSetConstrainedMember")
val hints: Hints = Hints(
smithy.api.UniqueItems(),
).lazily
val underlyingSchema: Schema[Set[String]] = set(string.addMemberHints().validated(smithy.api.Length(min = None, max = Some(2L)))).withId(id).addHints(hints)
val validator: Validator[Set[String], ValidatedSetConstrainedMember] = Validator.Builder.set[String].validatingMember(smithy.api.Length(min = None, max = Some(2L))).biject(Bijection[Set[String], ValidatedSetConstrainedMember](_.asInstanceOf[ValidatedSetConstrainedMember], value(_))).build()
implicit val schema: Schema[ValidatedSetConstrainedMember] = validator.toSchema(underlyingSchema)
@inline def apply(a: Set[String]): Either[String, ValidatedSetConstrainedMember] = validator.validate(a)
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ object ValidatedString extends ValidatedNewtype[String] {
val id: ShapeId = ShapeId("smithy4s.example", "ValidatedString")
val hints: Hints = Hints.empty
val underlyingSchema: Schema[String] = string.withId(id).addHints(hints).validated(smithy.api.Length(min = Some(1L), max = None)).validated(smithy.api.Pattern("[a-zA-Z0-9]+"))
val validator: Validator[String, ValidatedString] = Validator.of[String, ValidatedString](Bijection[String, ValidatedString](_.asInstanceOf[ValidatedString], value(_))).validating(smithy.api.Length(min = Some(1L), max = None)).alsoValidating(smithy.api.Pattern("[a-zA-Z0-9]+"))
val validator: Validator[String, ValidatedString] = Validator.Builder.simple[String].validating(smithy.api.Length(min = Some(1L), max = None)).validating(smithy.api.Pattern("[a-zA-Z0-9]+")).biject(Bijection[String, ValidatedString](_.asInstanceOf[ValidatedString], value(_))).build()
implicit val schema: Schema[ValidatedString] = validator.toSchema(underlyingSchema)
@inline def apply(a: String): Either[String, ValidatedString] = validator.validate(a)
}
12 changes: 12 additions & 0 deletions modules/bootstrapped/src/generated/smithy4s/example/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ package object example {

/** This is a simple example of a "quoted string" */
type AString = smithy4s.example.AString.Type
type AccountId = smithy4s.example.AccountId.Type
type AdditionalProperties = smithy4s.example.AdditionalProperties.Type
type Age = smithy4s.example.Age.Type
/** Multiple line doc comment for another string
Expand All @@ -62,6 +63,7 @@ package object example {
type DefaultStringMap = smithy4s.example.DefaultStringMap.Type
@deprecated(message = "N/A", since = "N/A")
type DeprecatedString = smithy4s.example.DeprecatedString.Type
type DeviceId = smithy4s.example.DeviceId.Type
type DogName = smithy4s.example.DogName.Type
type ExtraData = smithy4s.example.ExtraData.Type
type FancyList = smithy4s.example.FancyList.Type
Expand Down Expand Up @@ -127,6 +129,16 @@ package object example {
type UnwrappedFancyList = smithy4s.example.UnwrappedFancyList.Type
type Username = smithy4s.example.Username.Type
type UuidTrait = smithy4s.example.UuidTrait.Type
type ValidatedConstrainedIndexedSeqConstrainedMember = smithy4s.example.ValidatedConstrainedIndexedSeqConstrainedMember.Type
type ValidatedConstrainedList = smithy4s.example.ValidatedConstrainedList.Type
type ValidatedConstrainedListRefinedMember = smithy4s.example.ValidatedConstrainedListRefinedMember.Type
type ValidatedConstrainedMap = smithy4s.example.ValidatedConstrainedMap.Type
type ValidatedConstrainedVectorRefinedConstrainedMember = smithy4s.example.ValidatedConstrainedVectorRefinedConstrainedMember.Type
type ValidatedMapConstrainedKey = smithy4s.example.ValidatedMapConstrainedKey.Type
type ValidatedMapConstrainedValue = smithy4s.example.ValidatedMapConstrainedValue.Type
type ValidatedRefinedList = smithy4s.example.ValidatedRefinedList.Type
type ValidatedRefinedListConstrainedMember = smithy4s.example.ValidatedRefinedListConstrainedMember.Type
type ValidatedSetConstrainedMember = smithy4s.example.ValidatedSetConstrainedMember.Type
type ValidatedString = smithy4s.example.ValidatedString.Type

}
10 changes: 10 additions & 0 deletions modules/bootstrapped/src/main/smithy4s/example/instances.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package smithy4s.example

import smithy4s.RefinementProvider

object instances {

implicit val lengthProviderName
: RefinementProvider.Simple[smithy.api.Length, Name] =
RefinementProvider.lengthConstraint(_.value.value.length)
}
Loading