| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
Data.GI.Base.GVariant
Contents
Description
This module contains some helper functions for dealing with GVariant
values. The simplest way of dealing with them is by using the
IsGVariant typeclass:
str <- fromGVariant variant :: IO (Maybe Text)
assuming that the variant is expected to contain a string in UTF8 encoding. The code becomes even shorter if the type checker can determine the return type for you:
readStringVariant :: GVariant -> IO Text
readStringVariant variant =
fromGVariant variant >>= \case
Nothing -> error "Variant was not a string"
Just str -> return strAlternatively, you can use manually the gvariantFrom* and gvariantTo* family of functions.
- class IsGVariant a where
- toGVariant :: a -> IO GVariant
- fromGVariant :: GVariant -> IO (Maybe a)
- toGVariantFormatString :: a -> Text
- class Ord a => IsGVariantBasicType a
- noGVariant :: Maybe GVariant
- gvariantGetTypeString :: GVariant -> IO Text
- newtype GVariantSinglet a = GVariantSinglet a
- data GVariantDictEntry key value = GVariantDictEntry key value
- newtype GVariantHandle = GVariantHandle Int32
- data GVariantObjectPath
- newGVariantObjectPath :: Text -> Maybe GVariantObjectPath
- gvariantObjectPathToText :: GVariantObjectPath -> Text
- data GVariantSignature
- newGVariantSignature :: Text -> Maybe GVariantSignature
- gvariantSignatureToText :: GVariantSignature -> Text
- wrapGVariantPtr :: Ptr GVariant -> IO GVariant
- newGVariantFromPtr :: Ptr GVariant -> IO GVariant
- refGVariant :: GVariant -> IO (Ptr GVariant)
- unrefGVariant :: GVariant -> IO ()
- gvariantToBool :: GVariant -> IO (Maybe Bool)
- gvariantFromBool :: Bool -> IO GVariant
- gvariantToWord8 :: GVariant -> IO (Maybe Word8)
- gvariantFromWord8 :: Word8 -> IO GVariant
- gvariantToInt16 :: GVariant -> IO (Maybe Int16)
- gvariantFromInt16 :: Int16 -> IO GVariant
- gvariantToWord16 :: GVariant -> IO (Maybe Word16)
- gvariantFromWord16 :: Word16 -> IO GVariant
- gvariantToInt32 :: GVariant -> IO (Maybe Int32)
- gvariantFromInt32 :: Int32 -> IO GVariant
- gvariantToWord32 :: GVariant -> IO (Maybe Word32)
- gvariantFromWord32 :: Word32 -> IO GVariant
- gvariantToInt64 :: GVariant -> IO (Maybe Int64)
- gvariantFromInt64 :: Int64 -> IO GVariant
- gvariantToWord64 :: GVariant -> IO (Maybe Word64)
- gvariantFromWord64 :: Word64 -> IO GVariant
- gvariantToHandle :: GVariant -> IO (Maybe Int32)
- gvariantFromHandle :: Int32 -> IO GVariant
- gvariantToDouble :: GVariant -> IO (Maybe Double)
- gvariantFromDouble :: Double -> IO GVariant
- gvariantToText :: GVariant -> IO (Maybe Text)
- gvariantFromText :: Text -> IO GVariant
- gvariantToObjectPath :: GVariant -> IO (Maybe Text)
- gvariantFromObjectPath :: GVariantObjectPath -> IO GVariant
- gvariantToSignature :: GVariant -> IO (Maybe Text)
- gvariantFromSignature :: GVariantSignature -> IO GVariant
- gvariantToGVariant :: GVariant -> IO (Maybe GVariant)
- gvariantFromGVariant :: GVariant -> IO GVariant
- gvariantToBytestring :: GVariant -> IO (Maybe ByteString)
- gvariantFromBytestring :: ByteString -> IO GVariant
- gvariantFromMaybe :: forall a. IsGVariant a => Maybe a -> IO GVariant
- gvariantToMaybe :: forall a. IsGVariant a => GVariant -> IO (Maybe (Maybe a))
- gvariantFromDictEntry :: (IsGVariant key, IsGVariantBasicType key, IsGVariant value) => key -> value -> IO GVariant
- gvariantToDictEntry :: forall key value. (IsGVariant key, IsGVariantBasicType key, IsGVariant value) => GVariant -> IO (Maybe (key, value))
- gvariantFromMap :: (IsGVariant key, IsGVariantBasicType key, IsGVariant value) => Map key value -> IO GVariant
- gvariantToMap :: forall key value. (IsGVariant key, IsGVariantBasicType key, IsGVariant value) => GVariant -> IO (Maybe (Map key value))
- gvariantFromList :: forall a. IsGVariant a => [a] -> IO GVariant
- gvariantToList :: forall a. IsGVariant a => GVariant -> IO (Maybe [a])
- gvariantFromTuple :: [GVariant] -> IO GVariant
- gvariantToTuple :: GVariant -> IO (Maybe [GVariant])
Documentation
class IsGVariant a where Source
The typeclass for types that can be automatically marshalled into
GVariant using toGVariant and fromGVariant.
Methods
toGVariant :: a -> IO GVariant Source
Convert a value of the given type into a GVariant.
fromGVariant :: GVariant -> IO (Maybe a) Source
Try to decode a GVariant into a target type. If the
conversion fails we return Nothing. The type that was
expected can be obtained by calling toGVariantFormatString,
and the actual type as understood by the GVariant code can be
obtained by calling gvariantToTypeString.
toGVariantFormatString :: a -> Text Source
The expected format string for this type (the argument is ignored).
Instances
| IsGVariant Bool | |
| IsGVariant Double | |
| IsGVariant Int16 | |
| IsGVariant Int32 | |
| IsGVariant Int64 | |
| IsGVariant Word8 | |
| IsGVariant Word16 | |
| IsGVariant Word32 | |
| IsGVariant Word64 | |
| IsGVariant () | The empty tuple GVariant, mostly useful for type checking. |
| IsGVariant ByteString | |
| IsGVariant Text | |
| IsGVariant GVariant | |
| IsGVariant GVariantSignature | |
| IsGVariant GVariantObjectPath | |
| IsGVariant GVariantHandle | |
| IsGVariant a => IsGVariant [a] | |
| IsGVariant a => IsGVariant (Maybe a) | |
| IsGVariant a => IsGVariant (GVariantSinglet a) | One element tuples. |
| (IsGVariant a, IsGVariant b) => IsGVariant (a, b) | |
| (IsGVariant a, IsGVariantBasicType a, IsGVariant b) => IsGVariant (Map a b) | |
| (IsGVariant a, IsGVariantBasicType a, IsGVariant b) => IsGVariant (GVariantDictEntry a b) | |
| (IsGVariant a, IsGVariant b, IsGVariant c) => IsGVariant (a, b, c) | |
| (IsGVariant a, IsGVariant b, IsGVariant c, IsGVariant d) => IsGVariant (a, b, c, d) | |
| (IsGVariant a, IsGVariant b, IsGVariant c, IsGVariant d, IsGVariant e) => IsGVariant (a, b, c, d, e) |
class Ord a => IsGVariantBasicType a Source
The typeclass for basic type GVariant types, i.e. those that
are not containers.
Instances
noGVariant :: Maybe GVariant Source
An alias for Nothing :: Maybe GVariant to save some typing.
gvariantGetTypeString :: GVariant -> IO Text Source
Get the expected type of a GVariant, in GVariant
notation. See
https://developer.gnome.org/glib/stable/glib-GVariantType.html
for the meaning of the resulting format string.
Type wrappers
Some GVariant types are isomorphic to Haskell types, but they
carry some extra information. For example, there is a tuple
singlet type, which is isomorphic to a single Haskell value
with the added bit of information that it is wrapped in a tuple
container. In order to use these values you can use the
following wrappers, which allow the IsGVariant instance to
disambiguate the requested type properly.
newtype GVariantSinglet a Source
Haskell has no notion of one element tuples, but GVariants do, so
the following allows for marshalling one element tuples properly
using fromGVariant and toGVariant. For instance, to construct a
single element tuple containing a string, you could do
toGVariant (GVariantSinglet "Test")
Constructors
| GVariantSinglet a |
Instances
| Eq a => Eq (GVariantSinglet a) | |
| Show a => Show (GVariantSinglet a) | |
| IsGVariant a => IsGVariant (GVariantSinglet a) | One element tuples. |
data GVariantDictEntry key value Source
A DictEntry GVariant is isomorphic to a two-tuple. Wrapping the
values into a GVariantDictentry allows the IsGVariant instance
to do the right thing.
Constructors
| GVariantDictEntry key value |
Instances
| (Eq key, Eq value) => Eq (GVariantDictEntry key value) | |
| (Show key, Show value) => Show (GVariantDictEntry key value) | |
| (IsGVariant a, IsGVariantBasicType a, IsGVariant b) => IsGVariant (GVariantDictEntry a b) |
newtype GVariantHandle Source
Constructors
| GVariantHandle Int32 |
data GVariantObjectPath Source
An object representing a DBus object path, which is a particular
type of GVariant too. (Just a string with some specific
requirements.) In order to construct/deconstruct a
GVariantObjectPath one can use newGVariantObjectPath
and gvariantObjectPathToText.
newGVariantObjectPath :: Text -> Maybe GVariantObjectPath Source
Try to construct a DBus object path. If the passed string is not
a valid object path Nothing will be returned.
gvariantObjectPathToText :: GVariantObjectPath -> Text Source
Return the Text representation of a GVariantObjectPath.
data GVariantSignature Source
An object representing a DBus signature, which is a particular
type of GVariant too. (Just a string with some specific
requirements.) In order to construct/deconstruct a
GVariantSignature one can use newGVariantSignature and
gvariantSignatureToText.
newGVariantSignature :: Text -> Maybe GVariantSignature Source
Try to construct a DBus object path. If the passed string is not
a valid DBus signature Nothing will be returned.
gvariantSignatureToText :: GVariantSignature -> Text Source
Return the Text representation of a GVariantSignature.
Manual memory management
wrapGVariantPtr :: Ptr GVariant -> IO GVariant Source
Take ownership of a passed in Ptr (typically created just for
us, so if it is floating we sink it).
newGVariantFromPtr :: Ptr GVariant -> IO GVariant Source
Construct a Haskell wrapper for the given GVariant, without
assuming ownership.
unrefGVariant :: GVariant -> IO () Source
Remove a reference to the given GVariant.
Manual conversions
Basic types
The use of these should be fairly self-explanatory. If you
want to convert a Haskell type into a GVariant, use
gvariantTo*. If you want to convert a GVariant into a Haskell
type, use gvariantFrom*. The conversion can fail if the
GVariant is not of the expected type (if you want to convert
a GVariant containing a Int16 into a Text value, say), in
which case Nothing will be returned.
gvariantFromBool :: Bool -> IO GVariant Source
gvariantFromWord8 :: Word8 -> IO GVariant Source
gvariantFromInt16 :: Int16 -> IO GVariant Source
gvariantFromWord16 :: Word16 -> IO GVariant Source
gvariantFromInt32 :: Int32 -> IO GVariant Source
gvariantFromWord32 :: Word32 -> IO GVariant Source
gvariantFromInt64 :: Int64 -> IO GVariant Source
gvariantFromWord64 :: Word64 -> IO GVariant Source
gvariantFromDouble :: Double -> IO GVariant Source
gvariantToObjectPath :: GVariant -> IO (Maybe Text) Source
Extract a GVariantObjectPath from a GVariant, represented as
its underlying Text representation.
gvariantFromObjectPath :: GVariantObjectPath -> IO GVariant Source
Construct a GVariant containing an object path. In order to
build a GVariantObjectPath value see newGVariantObjectPath.
gvariantToSignature :: GVariant -> IO (Maybe Text) Source
Extract a GVariantSignature from a GVariant, represented as
Text.
gvariantFromSignature :: GVariantSignature -> IO GVariant Source
Construct a GVariant containing an DBus signature. In order to
build a GVariantSignature value see newGVariantSignature.
Container type conversions
gvariantToBytestring :: GVariant -> IO (Maybe ByteString) Source
Extract a zero terminated list of bytes into a ByteString.
gvariantFromBytestring :: ByteString -> IO GVariant Source
Encode a ByteString into a list of bytes GVariant.
gvariantFromMaybe :: forall a. IsGVariant a => Maybe a -> IO GVariant Source
gvariantToMaybe :: forall a. IsGVariant a => GVariant -> IO (Maybe (Maybe a)) Source
gvariantFromDictEntry :: (IsGVariant key, IsGVariantBasicType key, IsGVariant value) => key -> value -> IO GVariant Source
Construct a GVariant of type DictEntry from the given key and
value. The key must be a basic GVariant type, i.e. not a
container. This is determined by whether it belongs to the
IsGVariantBasicType typeclass. On the other hand value is an
arbitrary GVariant, and in particular it can be a container type.
gvariantToDictEntry :: forall key value. (IsGVariant key, IsGVariantBasicType key, IsGVariant value) => GVariant -> IO (Maybe (key, value)) Source
Unpack a DictEntry variant into key and value, which are
returned as a two element tuple in case of success.
gvariantFromMap :: (IsGVariant key, IsGVariantBasicType key, IsGVariant value) => Map key value -> IO GVariant Source
Pack a Map into a GVariant for dictionary type, which is just
an array of GVariantDictEntry.
gvariantToMap :: forall key value. (IsGVariant key, IsGVariantBasicType key, IsGVariant value) => GVariant -> IO (Maybe (Map key value)) Source
Unpack a GVariant into a Map. Notice that this assumes that
all the elements in the GVariant array of GVariantDictEntry are
of the same type, which is not necessary for a generic GVariant,
so this is somewhat restrictive. For the general case it is
necessary to use gvariantToList plus gvariantToDictEntry
directly.
gvariantFromList :: forall a. IsGVariant a => [a] -> IO GVariant Source
Given a list of elements construct a GVariant array containing
them.
gvariantToList :: forall a. IsGVariant a => GVariant -> IO (Maybe [a]) Source
Unpack a GVariant array into its elements.
gvariantFromTuple :: [GVariant] -> IO GVariant Source