aboutsummaryrefslogtreecommitdiff
path: root/src/Model/WellKnown.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Model/WellKnown.hs')
-rw-r--r--src/Model/WellKnown.hs51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/Model/WellKnown.hs b/src/Model/WellKnown.hs
new file mode 100644
index 0000000..066c9e3
--- /dev/null
+++ b/src/Model/WellKnown.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE DeriveGeneric #-}
+
+module Model.WellKnown (WellKnownClientResponse (..)
+ , BaseUrlHolder (..)
+ , WellKnownSupportResponse (..)
+ , Contact (..)
+ ) where
+
+import Data.Aeson
+import GHC.Generics (Generic)
+import Data.Text (Text)
+
+type URI = Text
+type EMail = Text
+type UserId = Text
+
+----------------------------------------------------------------------------------------------------
+data BaseUrlHolder = BaseUrlHolder
+ { base_url :: URI
+ } deriving (Eq, Show, Generic)
+
+instance ToJSON BaseUrlHolder where
+
+data WellKnownClientResponse = WellKnownClientResponse
+ { homeserver :: BaseUrlHolder
+ , identity_server :: BaseUrlHolder
+ } deriving (Eq, Show, Generic)
+
+instance ToJSON WellKnownClientResponse where
+ toJSON = genericToJSON defaultOptions { fieldLabelModifier = \name ->
+ case name of
+ "homeserver" -> "m.homeserver"
+ "identity_server" -> "m.identity_server"
+ other -> other
+ }
+
+----------------------------------------------------------------------------------------------------
+data Contact = Contact
+ { email_address :: EMail
+ , matrix_id :: UserId
+ , role :: Text -- Enum? [m.role.admin, m.role.security]
+ } deriving (Eq, Show, Generic)
+
+instance ToJSON Contact where
+
+data WellKnownSupportResponse = WellKnownSupportResponse
+ { contacts :: [Contact]
+ , support_page :: URI
+ } deriving (Eq, Show, Generic)
+
+instance ToJSON WellKnownSupportResponse where \ No newline at end of file