git.iko.soy/typeable/flat-instances
on master help sign in
5 files changed+43−10
since splitsnapshots
unifiedsplit
flat-instances.cabal+14−1 src/Flat/Instances.hs → src/Flat/Orphans.hs+5−4 src/Flat/Servant.hs+19 stack.yaml+1−1 stack.yaml.lock+4−4
flat-instances.cabal+14−1
@@ -4,13 +4,26 @@ name: flat-instances
44version: 0.1.0.0
55license-file: LICENSE
66
7+Flag flat-servant
8+ Description: Enable Flat serialization support
9+ Default: True
10+ Manual: False
11+
712library
813 exposed-modules:
9− Flat.Instances
14+ Flat.Orphans
1015 build-depends:
1116 base,
1217 flat,
1318 time,
19+ vector
20+ if flag(flat-servant)
21+ exposed-modules:
22+ Flat.Servant
23+ build-depends:
24+ bytestring,
25+ servant
26+
1427 hs-source-dirs:
1528 src
1629 default-language:
src/Flat/Instances.hs → src/Flat/Orphans.hsrenamed+5−4
@@ -1,14 +1,13 @@
11{-# LANGUAGE DerivingVia #-}
2−{-# LANGUAGE NamedFieldPuns #-}
32{-# LANGUAGE RecordWildCards #-}
43{-# LANGUAGE StandaloneDeriving #-}
54{-# OPTIONS_GHC -fno-warn-orphans #-}
65
7−
8−module Flat.Instances where
6+module Flat.Orphans where
97
108import Data.Fixed
119import Data.Time
10+import Data.Vector
1211import Flat as F
1312
1413
@@ -20,7 +19,7 @@ instance Flat DiffTime where
2019 size = F.size . diffTimeToPicoseconds
2120
2221utcTimeToTuple :: UTCTime -> (Day, DiffTime)
23−utcTimeToTuple = ((,) <$> utctDay <*> utctDayTime)
22+utcTimeToTuple UTCTime{..} = (utctDay, utctDayTime)
2423
2524instance Flat UTCTime where
2625 encode = F.encode . utcTimeToTuple
@@ -66,3 +65,5 @@ instance Flat ZonedTime where
6665 size = F.size . zonedTimeToTuple
6766 encode = F.encode . zonedTimeToTuple
6867 decode = uncurry ZonedTime <$> F.decode
68+
69+deriving via (AsArray (Vector a)) instance Flat a => Flat (Vector a)
src/Flat/Servant.hsnew file+19
@@ -0,0 +1,19 @@
1+{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}
2+module Flat.Servant where
3+
4+import Data.Bifunctor
5+import Data.ByteString.Lazy
6+import Flat as F
7+import Servant.API
8+
9+
10+data FlatBinary
11+
12+instance Accept FlatBinary where
13+ contentType _ = "application/octet-stream"
14+
15+instance Flat a => MimeRender FlatBinary a where
16+ mimeRender _ = fromStrict . F.flat
17+
18+instance Flat a => MimeUnrender FlatBinary a where
19+ mimeUnrender _ = first show . F.unflat
stack.yaml+1−1
@@ -1,4 +1,4 @@
1−resolver: lts-19.6
1+resolver: lts-19.33
22
33packages:
44- .
stack.yaml.lock+4−4
@@ -6,7 +6,7 @@
66packages: []
77snapshots:
88- completed:
9− sha256: fb634b19f31da06684bb07ce02a20c75a3162138f279b388905b03ebd57bb50f
10− size: 618876
11− url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/6.yaml
12− original: lts-19.6
9+ sha256: 6d1532d40621957a25bad5195bfca7938e8a06d923c91bc52aa0f3c41181f2d4
10+ size: 619204
11+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/33.yaml
12+ original: lts-19.33