mu-rpc 0.5.0.1 → 0.5.0.2
raw patch · 3 files changed
+63/−51 lines, 3 filesdep ~aesondep ~template-haskellPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: aeson, template-haskell
API changes (from Hackage documentation)
- Mu.Server: instance Mu.Server.ToNamedList () '[]
- Mu.Server: instance Mu.Server.ToNamedList (Mu.Server.Named n h) '[ '(n, h)]
- Mu.Server: instance Mu.Server.ToNamedList (Mu.Server.Named n1 h1, Mu.Server.Named n2 h2) '[ '(n1, h1), '(n2, h2)]
- Mu.Server: instance Mu.Server.ToNamedList (Mu.Server.Named n1 h1, Mu.Server.Named n2 h2, Mu.Server.Named n3 h3) '[ '(n1, h1), '(n2, h2), '(n3, h3)]
- Mu.Server: instance Mu.Server.ToNamedList (Mu.Server.Named n1 h1, Mu.Server.Named n2 h2, Mu.Server.Named n3 h3, Mu.Server.Named n4 h4) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4)]
- Mu.Server: instance Mu.Server.ToNamedList (Mu.Server.Named n1 h1, Mu.Server.Named n2 h2, Mu.Server.Named n3 h3, Mu.Server.Named n4 h4, Mu.Server.Named n5 h5) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5)]
- Mu.Server: instance Mu.Server.ToNamedList (Mu.Server.Named n1 h1, Mu.Server.Named n2 h2, Mu.Server.Named n3 h3, Mu.Server.Named n4 h4, Mu.Server.Named n5 h5, Mu.Server.Named n6 h6) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6)]
- Mu.Server: instance Mu.Server.ToNamedList (Mu.Server.Named n1 h1, Mu.Server.Named n2 h2, Mu.Server.Named n3 h3, Mu.Server.Named n4 h4, Mu.Server.Named n5 h5, Mu.Server.Named n6 h6, Mu.Server.Named n7 h7) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7)]
- Mu.Server: instance Mu.Server.ToNamedList (Mu.Server.Named n1 h1, Mu.Server.Named n2 h2, Mu.Server.Named n3 h3, Mu.Server.Named n4 h4, Mu.Server.Named n5 h5, Mu.Server.Named n6 h6, Mu.Server.Named n7 h7, Mu.Server.Named n8 h8) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8)]
- Mu.Server: instance Mu.Server.ToNamedList (Mu.Server.Named n1 h1, Mu.Server.Named n2 h2, Mu.Server.Named n3 h3, Mu.Server.Named n4 h4, Mu.Server.Named n5 h5, Mu.Server.Named n6 h6, Mu.Server.Named n7 h7, Mu.Server.Named n8 h8, Mu.Server.Named n9 h9) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8), '(n9, h9)]
- Mu.Server: instance Mu.Server.ToNamedList (Mu.Server.NamedList nl) nl
+ Mu.Named: [:|:] :: Named n h -> NamedList hs -> NamedList ('(n, h) : hs)
+ Mu.Named: [N0] :: NamedList '[]
+ Mu.Named: [Named] :: forall n h. h -> Named n h
+ Mu.Named: class ToNamedList p nl | p -> nl
+ Mu.Named: data Named n h
+ Mu.Named: data NamedList (hs :: [(Symbol, *)])
+ Mu.Named: infixr 4 :|:
+ Mu.Named: instance Mu.Named.ToNamedList () '[]
+ Mu.Named: instance Mu.Named.ToNamedList (Mu.Named.Named n h) '[ '(n, h)]
+ Mu.Named: instance Mu.Named.ToNamedList (Mu.Named.Named n1 h1, Mu.Named.Named n2 h2) '[ '(n1, h1), '(n2, h2)]
+ Mu.Named: instance Mu.Named.ToNamedList (Mu.Named.Named n1 h1, Mu.Named.Named n2 h2, Mu.Named.Named n3 h3) '[ '(n1, h1), '(n2, h2), '(n3, h3)]
+ Mu.Named: instance Mu.Named.ToNamedList (Mu.Named.Named n1 h1, Mu.Named.Named n2 h2, Mu.Named.Named n3 h3, Mu.Named.Named n4 h4) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4)]
+ Mu.Named: instance Mu.Named.ToNamedList (Mu.Named.Named n1 h1, Mu.Named.Named n2 h2, Mu.Named.Named n3 h3, Mu.Named.Named n4 h4, Mu.Named.Named n5 h5) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5)]
+ Mu.Named: instance Mu.Named.ToNamedList (Mu.Named.Named n1 h1, Mu.Named.Named n2 h2, Mu.Named.Named n3 h3, Mu.Named.Named n4 h4, Mu.Named.Named n5 h5, Mu.Named.Named n6 h6) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6)]
+ Mu.Named: instance Mu.Named.ToNamedList (Mu.Named.Named n1 h1, Mu.Named.Named n2 h2, Mu.Named.Named n3 h3, Mu.Named.Named n4 h4, Mu.Named.Named n5 h5, Mu.Named.Named n6 h6, Mu.Named.Named n7 h7) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7)]
+ Mu.Named: instance Mu.Named.ToNamedList (Mu.Named.Named n1 h1, Mu.Named.Named n2 h2, Mu.Named.Named n3 h3, Mu.Named.Named n4 h4, Mu.Named.Named n5 h5, Mu.Named.Named n6 h6, Mu.Named.Named n7 h7, Mu.Named.Named n8 h8) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8)]
+ Mu.Named: instance Mu.Named.ToNamedList (Mu.Named.Named n1 h1, Mu.Named.Named n2 h2, Mu.Named.Named n3 h3, Mu.Named.Named n4 h4, Mu.Named.Named n5 h5, Mu.Named.Named n6 h6, Mu.Named.Named n7 h7, Mu.Named.Named n8 h8, Mu.Named.Named n9 h9) '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8), '(n9, h9)]
+ Mu.Named: instance Mu.Named.ToNamedList (Mu.Named.NamedList nl) nl
+ Mu.Named: toNamedList :: ToNamedList p nl => p -> NamedList nl
Files
- mu-rpc.cabal +4/−3
- src/Mu/Named.hs +57/−0
- src/Mu/Server.hs +2/−48
mu-rpc.cabal view
@@ -1,5 +1,5 @@ name: mu-rpc-version: 0.5.0.1+version: 0.5.0.2 synopsis: Protocol-independent declaration of services and servers. description: Protocol-independent declaration of services and servers for mu-haskell.@@ -22,20 +22,21 @@ library exposed-modules:+ Mu.Named Mu.Rpc Mu.Rpc.Annotations Mu.Rpc.Examples Mu.Server build-depends:- aeson+ aeson >=1.4 && <2 , base >=4.12 && <5 , conduit >=1.3.2 && <1.4 , http-types >=0.12 && <0.13 , mtl >=2.2 && <2.3 , mu-schema >=0.3 && <0.4 , sop-core >=0.5 && <0.6- , template-haskell >=2.14 && <2.17+ , template-haskell >=2.14 && <2.18 , text >=1.2 && <1.3 , wai >=3.2 && <4
+ src/Mu/Named.hs view
@@ -0,0 +1,57 @@+{-# language DataKinds #-}+{-# language FlexibleInstances #-}+{-# language FunctionalDependencies #-}+{-# language GADTs #-}+{-# language PolyKinds #-}+{-# language RankNTypes #-}+{-# language TypeOperators #-}+module Mu.Named where++import GHC.TypeLits++-- | A value tagged with a type-level name.+data Named n h where+ Named :: forall n h. h -> Named n h++infixr 4 :|:+-- | Heterogeneous list in which each element+-- is tagged with a type-level name.+data NamedList (hs :: [(Symbol, *)]) where+ N0 :: NamedList '[]+ (:|:) :: Named n h -> NamedList hs+ -> NamedList ('(n, h) ': hs)++-- | Used to turn tuples into 'NamedList's.+class ToNamedList p nl | p -> nl where+ toNamedList :: p -> NamedList nl++instance ToNamedList (NamedList nl) nl where+ toNamedList = id+instance ToNamedList () '[] where+ toNamedList _ = N0+instance ToNamedList (Named n h) '[ '(n, h) ] where+ toNamedList n = n :|: N0+instance ToNamedList (Named n1 h1, Named n2 h2)+ '[ '(n1, h1), '(n2, h2) ] where+ toNamedList (n1, n2) = n1 :|: n2 :|: N0+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3)+ '[ '(n1, h1), '(n2, h2), '(n3, h3) ] where+ toNamedList (n1, n2, n3) = n1 :|: n2 :|: n3 :|: N0+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4)+ '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4) ] where+ toNamedList (n1, n2, n3, n4) = n1 :|: n2 :|: n3 :|: n4 :|: N0+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5)+ '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5) ] where+ toNamedList (n1, n2, n3, n4, n5) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: N0+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6)+ '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6) ] where+ toNamedList (n1, n2, n3, n4, n5, n6) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: N0+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7)+ '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7) ] where+ toNamedList (n1, n2, n3, n4, n5, n6, n7) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: N0+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7, Named n8 h8)+ '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8) ] where+ toNamedList (n1, n2, n3, n4, n5, n6, n7, n8) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: n8 :|: N0+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7, Named n8 h8, Named n9 h9)+ '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8), '(n9, h9) ] where+ toNamedList (n1, n2, n3, n4, n5, n6, n7, n8, n9) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: n8 :|: n9 :|: N0
src/Mu/Server.hs view
@@ -79,6 +79,7 @@ import Data.Typeable import GHC.TypeLits +import Mu.Named import Mu.Rpc import Mu.Schema @@ -130,7 +131,7 @@ | Unauthenticated | Internal | Invalid- | NotFound+ | NotFound deriving (Eq, Show) -- | Defines a mapping between outcome of@@ -361,53 +362,6 @@ :: (ToNamedList p nl, ToServices chn info ss m hs nl) => p -> ServerT chn info ('Package pname ss) m hs resolver nl = Services $ toServices $ toNamedList nl---- | A value tagged with a type-level name.-data Named n h where- Named :: forall n h. h -> Named n h--infixr 4 :|:--- | Heterogeneous list in which each element--- is tagged with a type-level name.-data NamedList (hs :: [(Symbol, *)]) where- N0 :: NamedList '[]- (:|:) :: Named n h -> NamedList hs- -> NamedList ('(n, h) ': hs)---- | Used to turn tuples into 'NamedList's.-class ToNamedList p nl | p -> nl where- toNamedList :: p -> NamedList nl--instance ToNamedList (NamedList nl) nl where- toNamedList = id-instance ToNamedList () '[] where- toNamedList _ = N0-instance ToNamedList (Named n h) '[ '(n, h) ] where- toNamedList n = n :|: N0-instance ToNamedList (Named n1 h1, Named n2 h2)- '[ '(n1, h1), '(n2, h2) ] where- toNamedList (n1, n2) = n1 :|: n2 :|: N0-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3)- '[ '(n1, h1), '(n2, h2), '(n3, h3) ] where- toNamedList (n1, n2, n3) = n1 :|: n2 :|: n3 :|: N0-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4)- '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4) ] where- toNamedList (n1, n2, n3, n4) = n1 :|: n2 :|: n3 :|: n4 :|: N0-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5)- '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5) ] where- toNamedList (n1, n2, n3, n4, n5) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: N0-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6)- '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6) ] where- toNamedList (n1, n2, n3, n4, n5, n6) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: N0-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7)- '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7) ] where- toNamedList (n1, n2, n3, n4, n5, n6, n7) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: N0-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7, Named n8 h8)- '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8) ] where- toNamedList (n1, n2, n3, n4, n5, n6, n7, n8) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: n8 :|: N0-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7, Named n8 h8, Named n9 h9)- '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8), '(n9, h9) ] where- toNamedList (n1, n2, n3, n4, n5, n6, n7, n8, n9) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: n8 :|: n9 :|: N0 class ToHandlers chn info inh ms m hs nl | chn inh ms m nl -> hs where toHandlers :: NamedList nl