Skip to content
Merged
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 CHANGELOG-draft.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ THIS FILE ACCUMULATES THE RELEASE NOTES FOR THE UPCOMING RELEASE.
## Documentation

* Added documentation of federation errors (#1674)
* Better swagger schema for the Range type (#1748)
* Add better example for Domain in swagger (#1748)

## Internal changes

Expand Down
5 changes: 4 additions & 1 deletion libs/types-common/src/Data/Domain.hs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

module Data.Domain where

import Control.Lens ((?~))
import Data.Aeson (FromJSON, FromJSONKey, FromJSONKeyFunction (FromJSONKeyTextParser), ToJSON, ToJSONKey (toJSONKey))
import qualified Data.Aeson as Aeson
import Data.Aeson.Types (toJSONKeyText)
Expand Down Expand Up @@ -66,7 +67,9 @@ newtype Domain = Domain {_domainText :: Text}
deriving (FromJSON, ToJSON, S.ToSchema) via Schema Domain

instance ToSchema Domain where
schema = domainText .= parsedText "Domain" mkDomain
schema =
domainText .= parsedText "Domain" mkDomain
& doc . S.schema . S.example ?~ "example.com"

domainText :: Domain -> Text
domainText = _domainText
Expand Down
47 changes: 42 additions & 5 deletions libs/types-common/src/Data/Range.hs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ module Data.Range
where

import Cassandra (ColumnType, Cql (..), Tagged, retag)
import Control.Lens ((?~))
import Control.Lens ((%~), (?~))
import Data.Aeson (FromJSON (parseJSON), ToJSON (toJSON))
import Data.Aeson.Types as Aeson (Parser)
import qualified Data.Attoparsec.ByteString as Atto
Expand Down Expand Up @@ -121,7 +121,7 @@ instance (Within a n m, FromJSON a) => FromJSON (Range n m a) where
msg sn sm = fail (errorMsg (fromSing sn) (fromSing sm) "")

rangedSchema ::
(Within a n m, Bounds b) =>
(Within a n m, HasRangedSchemaDocModifier d b) =>
SNat n ->
SNat m ->
SchemaP d v w a b ->
Expand All @@ -131,18 +131,55 @@ rangedSchema sn sm sch = Range <$> untypedRangedSchema (get sn) (get sm) sch
get = toInteger . fromSing

untypedRangedSchema ::
Bounds b =>
forall d v w a b.
(HasRangedSchemaDocModifier d b) =>
Integer ->
Integer ->
SchemaP d v w a b ->
SchemaP d v w a b
untypedRangedSchema n m sch = sch `withParser` check
untypedRangedSchema n m sch = (sch `withParser` check) & doc %~ rangedSchemaDocModifier (Proxy @b) n m
where
check x =
x <$ guard (within x n m)
<|> fail (errorMsg n m "")

instance (Within a n m, ToSchema a) => ToSchema (Range n m a) where
class Bounds a => HasRangedSchemaDocModifier d a where
rangedSchemaDocModifier :: Proxy a -> Integer -> Integer -> d -> d

listRangedSchemaDocModifier :: S.HasSchema d S.Schema => Integer -> Integer -> d -> d
listRangedSchemaDocModifier n m = S.schema %~ ((S.minItems ?~ n) . (S.maxItems ?~ m))

stringRangedSchemaDocModifier :: S.HasSchema d S.Schema => Integer -> Integer -> d -> d
stringRangedSchemaDocModifier n m = S.schema %~ ((S.minLength ?~ n) . (S.maxLength ?~ m))

numRangedSchemaDocModifier :: S.HasSchema d S.Schema => Integer -> Integer -> d -> d
numRangedSchemaDocModifier n m = S.schema %~ ((S.minimum_ ?~ fromIntegral n) . (S.maximum_ ?~ fromIntegral m))

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d [a] where rangedSchemaDocModifier _ = listRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d Text where rangedSchemaDocModifier _ = stringRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d String where rangedSchemaDocModifier _ = stringRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d (AsciiText c) where rangedSchemaDocModifier _ = stringRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d Int where rangedSchemaDocModifier _ = numRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d Int32 where rangedSchemaDocModifier _ = numRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d Integer where rangedSchemaDocModifier _ = numRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d Word where rangedSchemaDocModifier _ = numRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d Word8 where rangedSchemaDocModifier _ = numRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d Word16 where rangedSchemaDocModifier _ = numRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d Word32 where rangedSchemaDocModifier _ = numRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d Word64 where rangedSchemaDocModifier _ = numRangedSchemaDocModifier

instance (Within a n m, ToSchema a, HasRangedSchemaDocModifier NamedSwaggerDoc a) => ToSchema (Range n m a) where
schema = fromRange .= rangedSchema sing sing schema

instance (Within a n m, Cql a) => Cql (Range n m a) where
Expand Down