-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | generic types for Secure Scuttlebutt -- -- Secure Scuttlebutt is a database of unforgeable append-only feeds, -- optimized for efficient replication for peer to peer protocols. -- -- This library contains data types for common Scuttlebutt messages, -- including JSON deserialization. @package scuttlebutt-types @version 0.3.0 module Ssb.Types.Key newtype PublicKey Ed25519PublicKey :: PublicKey -> PublicKey [ed25519Key] :: PublicKey -> PublicKey -- | Decodes a SSB Ed25519 public key, which is base64 encoded. parseEd25519PublicKey :: ByteString -> Maybe PublicKey -- | Formats a SSB public key as a base64 encoded string. formatPublicKey :: PublicKey -> ByteString instance GHC.Classes.Ord Ssb.Types.Key.PublicKey instance GHC.Classes.Eq Ssb.Types.Key.PublicKey instance GHC.Show.Show Ssb.Types.Key.PublicKey module Ssb.Types.Hash newtype Hash Sha256 :: Digest SHA256 -> Hash [sha256] :: Hash -> Digest SHA256 -- | Decodes a SHA256 hash, which is base64 encoded. parseSha256 :: ByteString -> Maybe Hash -- | Formats a hash as a base64 encoded string. formatHash :: Hash -> ByteString type HashType = Text -- | A value accompanied with the hash of the ByteString that it was -- deserialized from. data Hashed v Hashed :: v -> Hash -> Hashed v [hashedValue] :: Hashed v -> v [hashOf] :: Hashed v -> Hash calcHashed :: ByteString -> (v -> HashType) -> (ByteString -> Maybe v) -> Maybe (Hashed v) instance GHC.Classes.Ord v => GHC.Classes.Ord (Ssb.Types.Hash.Hashed v) instance GHC.Classes.Eq v => GHC.Classes.Eq (Ssb.Types.Hash.Hashed v) instance GHC.Show.Show v => GHC.Show.Show (Ssb.Types.Hash.Hashed v) instance GHC.Classes.Ord Ssb.Types.Hash.Hash instance GHC.Classes.Eq Ssb.Types.Hash.Hash instance GHC.Show.Show Ssb.Types.Hash.Hash instance GHC.Base.Functor Ssb.Types.Hash.Hashed module Ssb.Types.Link -- | A link to a message, feed, or blob. data Link Link :: Char -> Text -> Text -> Link -- | sigil that starts the link, eg '@' [linkSigil] :: Link -> Char -- | thing being linked to (base64 encoded) [linkTo] :: Link -> Text -- | hash or key algorithm of thing being linked to, eg "sha256" [linkTag] :: Link -> Text -- | Parses a Link eg -- "@LA9HYf5rnUJFHHTklKXLLRyrEytayjbFZRo76Aj/qKs=.ed25519" parseLink :: Text -> Either String Link -- | Formats a Link. formatLink :: Link -> Text -- | A link to a feed. newtype FeedLink FeedLink :: PublicKey -> FeedLink [unFeedLink] :: FeedLink -> PublicKey -- | A link to a message. newtype MessageLink MessageLink :: Hash -> MessageLink [unMessageLink] :: MessageLink -> Hash -- | A link to a blob. newtype BlobLink BlobLink :: Hash -> BlobLink [unBlobLink] :: BlobLink -> Hash -- | Class of types that are links. class IsLink t where toJSONLink = toJSON . toLink fromJSONLink o = do { l <- parseJSON o; either fail pure (fromLink l) } fromLink :: IsLink t => Link -> Either String t toLink :: IsLink t => t -> Link toJSONLink :: IsLink t => t -> Value fromJSONLink :: IsLink t => Value -> Parser t instance GHC.Classes.Ord Ssb.Types.Link.BlobLink instance GHC.Classes.Eq Ssb.Types.Link.BlobLink instance GHC.Show.Show Ssb.Types.Link.BlobLink instance GHC.Classes.Ord Ssb.Types.Link.MessageLink instance GHC.Classes.Eq Ssb.Types.Link.MessageLink instance GHC.Show.Show Ssb.Types.Link.MessageLink instance GHC.Classes.Ord Ssb.Types.Link.FeedLink instance GHC.Classes.Eq Ssb.Types.Link.FeedLink instance GHC.Show.Show Ssb.Types.Link.FeedLink instance GHC.Classes.Ord Ssb.Types.Link.Link instance GHC.Classes.Eq Ssb.Types.Link.Link instance GHC.Show.Show Ssb.Types.Link.Link instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Link.Link instance Data.Aeson.Types.ToJSON.ToJSON Ssb.Types.Link.Link instance Ssb.Types.Link.IsLink Ssb.Types.Link.FeedLink instance Data.Aeson.Types.ToJSON.ToJSON Ssb.Types.Link.FeedLink instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Link.FeedLink instance Ssb.Types.Link.IsLink Ssb.Types.Link.MessageLink instance Data.Aeson.Types.ToJSON.ToJSON Ssb.Types.Link.MessageLink instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Link.MessageLink instance Ssb.Types.Link.IsLink Ssb.Types.Link.BlobLink instance Data.Aeson.Types.ToJSON.ToJSON Ssb.Types.Link.BlobLink instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Link.BlobLink module Ssb.Types.Message type Signature = String data Message a Message :: Maybe MessageLink -> FeedLink -> Int64 -> Float -> HashType -> a -> Signature -> Message a [previous] :: Message a -> Maybe MessageLink [author] :: Message a -> FeedLink [sequence] :: Message a -> Int64 [timestamp] :: Message a -> Float [hash] :: Message a -> HashType [content] :: Message a -> a [signature] :: Message a -> Signature messageLink :: Hashed (Message a) -> MessageLink -- | Parsing a Message AnyContent allows parsing the message envelope, -- regardless of the type of content in the message. data AnyContent AnyContent :: Value -> AnyContent [fromAnyContent] :: AnyContent -> Value -- | Get the declared type of content in a Message AnyContent. contentType :: Message AnyContent -> Text -- | Parses a JSON formatted message, and accompanies it with the hash that -- was originally used for the message. parseMessage :: FromJSON a => ByteString -> Maybe (Hashed (Message a)) -- | For best efficiency when the type of a message is not known, first -- parse to a Message AnyContent, and then use this function with -- parseMaybe or parseEither to try to further parse that -- to different message types. -- -- For example: -- --
-- Just somemsg = decode b :: Maybe Message AnyContent -- case parseMaybe narrowParse somemsg :: Maybe (Message Post) of -- Just postmsg -> ... -- Nothing -> case parseMaybe narrowParse somemsg :: Maybe (Message PrivateContent) of -- Just privmsg -> ... -- Nothing -> ... --narrowParse :: FromJSON a => Message AnyContent -> Parser (Message a) -- | A message with encrypted content. data PrivateContent PrivateContent :: Text -> PrivateContent -- | A post is a text-based message, for a public or private audience. It -- can be a reply to other posts. data Post Post :: Text -> Maybe Text -> Maybe MessageLink -> Maybe Branch -> Maybe [FeedLink] -> Maybe Mentions -> Post [text] :: Post -> Text [channel] :: Post -> Maybe Text [root] :: Post -> Maybe MessageLink [branch] :: Post -> Maybe Branch [recps] :: Post -> Maybe [FeedLink] [mentions] :: Post -> Maybe Mentions -- | Link to the message in the thread that a Post replies to. -- -- Generally there is only one link, but sometimes more than one. newtype Branch Branch :: [MessageLink] -> Branch [fromBranch] :: Branch -> [MessageLink] newtype Mentions Mentions :: [Mention] -> Mentions [fromMentions] :: Mentions -> [Mention] -- | A reference to other feeds, entities, or blobs that were mentioned in -- a Post. data Mention Mention :: Link -> Maybe Text -> Mention [mentionLink] :: Mention -> Link [mentionName] :: Mention -> Maybe Text -- | About-messages set attributes about someone or something. They can be -- used to set a name or picture for users, files, or messages. However, -- they're most commonly published about users. data About About :: Link -> Maybe Text -> Maybe AboutImage -> Maybe Text -> About [about] :: About -> Link [name] :: About -> Maybe Text [image] :: About -> Maybe AboutImage [description] :: About -> Maybe Text data AboutImage AboutImage :: BlobLink -> Maybe Int -> Maybe Text -> Maybe Int -> Maybe Int -> AboutImage [aboutImageLink] :: AboutImage -> BlobLink [aboutImageSize] :: AboutImage -> Maybe Int [aboutImageType] :: AboutImage -> Maybe Text [aboutImageWidth] :: AboutImage -> Maybe Int [aboutImageHeight] :: AboutImage -> Maybe Int -- | Contact-messages determine who you are following or blocking. data Contact Contact :: FeedLink -> Bool -> Bool -> Contact [contact] :: Contact -> FeedLink [following] :: Contact -> Bool [blocking] :: Contact -> Bool -- | Vote-messages signal approval about someone or something. Votes can be -- on users, messages, or blobs. data Vote Vote :: Link -> Int -> Maybe Text -> Vote [voteLink] :: Vote -> Link [voteValue] :: Vote -> Int [voteExpression] :: Vote -> Maybe Text data Pub Pub :: Text -> Int -> FeedLink -> Pub [pubHost] :: Pub -> Text [pubPort] :: Pub -> Int [pubKey] :: Pub -> FeedLink -- | Parse the content of a message using the provided Parser, which will -- typically be genericParseJSON defaultOptions. -- -- The "type" field must contain the specified Text for the parse to -- succeed. parseMessageType :: Text -> (Value -> Parser a) -> Value -> Parser a instance GHC.Generics.Generic Ssb.Types.Message.Pub instance GHC.Classes.Eq Ssb.Types.Message.Pub instance GHC.Show.Show Ssb.Types.Message.Pub instance GHC.Generics.Generic Ssb.Types.Message.Vote instance GHC.Classes.Eq Ssb.Types.Message.Vote instance GHC.Show.Show Ssb.Types.Message.Vote instance GHC.Generics.Generic Ssb.Types.Message.Contact instance GHC.Classes.Eq Ssb.Types.Message.Contact instance GHC.Show.Show Ssb.Types.Message.Contact instance GHC.Generics.Generic Ssb.Types.Message.About instance GHC.Classes.Eq Ssb.Types.Message.About instance GHC.Show.Show Ssb.Types.Message.About instance GHC.Generics.Generic Ssb.Types.Message.AboutImage instance GHC.Classes.Eq Ssb.Types.Message.AboutImage instance GHC.Show.Show Ssb.Types.Message.AboutImage instance GHC.Generics.Generic Ssb.Types.Message.Post instance GHC.Classes.Eq Ssb.Types.Message.Post instance GHC.Show.Show Ssb.Types.Message.Post instance GHC.Base.Monoid Ssb.Types.Message.Mentions instance GHC.Classes.Eq Ssb.Types.Message.Mentions instance GHC.Show.Show Ssb.Types.Message.Mentions instance GHC.Generics.Generic Ssb.Types.Message.Mention instance GHC.Classes.Eq Ssb.Types.Message.Mention instance GHC.Show.Show Ssb.Types.Message.Mention instance GHC.Base.Monoid Ssb.Types.Message.Branch instance GHC.Classes.Eq Ssb.Types.Message.Branch instance GHC.Show.Show Ssb.Types.Message.Branch instance GHC.Classes.Eq Ssb.Types.Message.PrivateContent instance GHC.Show.Show Ssb.Types.Message.PrivateContent instance GHC.Classes.Eq Ssb.Types.Message.AnyContent instance GHC.Show.Show Ssb.Types.Message.AnyContent instance GHC.Generics.Generic (Ssb.Types.Message.Message a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Ssb.Types.Message.Message a) instance GHC.Show.Show a => GHC.Show.Show (Ssb.Types.Message.Message a) instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Ssb.Types.Message.Message a) instance GHC.Base.Functor Ssb.Types.Message.Message instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.AnyContent instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.PrivateContent instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.Post instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.Branch instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.Mentions instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.Mention instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.About instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.AboutImage instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.Contact instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.Vote instance Data.Aeson.Types.FromJSON.FromJSON Ssb.Types.Message.Pub module Ssb.Types