Loading lib/gvariant.nix +314 −91 Original line number Diff line number Diff line /* /** A partial and basic implementation of GVariant formatted strings. See [GVariant Format Strings](https://docs.gtk.org/glib/gvariant-format-strings.html) for details. Loading Loading @@ -41,18 +41,29 @@ let variant = "v"; }; /* Check if a value is a GVariant value in rec { inherit type; /** Check if a value is a GVariant value # Inputs `v` Type: : value to check # Type ``` isGVariant :: Any -> Bool ``` */ isGVariant = v: v._type or "" == "gvariant"; in rec { inherit type isGVariant; intConstructors = [ { name = "mkInt32"; Loading Loading @@ -100,11 +111,22 @@ rec { } ]; /* Returns the GVariant value that most closely matches the given Nix value. /** Returns the GVariant value that most closely matches the given Nix value. If no GVariant value can be found unambiguously then error is thrown. Type: # Inputs `v` : 1\. Function argument # Type ``` mkValue :: Any -> gvariant ``` */ mkValue = v: if builtins.isBool v then Loading Loading @@ -132,14 +154,32 @@ rec { else throw "The GVariant type of “${builtins.typeOf v}” can't be inferred."; /* Returns the GVariant array from the given type of the elements and a Nix list. /** Returns the GVariant array from the given type of the elements and a Nix list. # Inputs `elems` Type: : 1\. Function argument # Type ``` mkArray :: [Any] -> gvariant ``` # Examples :::{.example} ## `lib.gvariant.mkArray` usage example Example: ```nix # Creating a string array lib.gvariant.mkArray [ "a" "b" "c" ] ``` ::: */ mkArray = elems: let Loading @@ -153,31 +193,67 @@ rec { "@${self.type} [${concatMapStringsSep "," toString self.value}]"; }; /* Returns the GVariant array from the given empty Nix list. /** Returns the GVariant array from the given empty Nix list. Type: # Inputs `elemType` : 1\. Function argument # Type ``` mkEmptyArray :: gvariant.type -> gvariant ``` Example: # Examples :::{.example} ## `lib.gvariant.mkEmptyArray` usage example ```nix # Creating an empty string array lib.gvariant.mkEmptyArray (lib.gvariant.type.string) ``` ::: */ mkEmptyArray = elemType: mkPrimitive (type.arrayOf elemType) [ ] // { __toString = self: "@${self.type} []"; }; /* Returns the GVariant variant from the given Nix value. Variants are containers /** Returns the GVariant variant from the given Nix value. Variants are containers of different GVariant type. Type: # Inputs `elem` : 1\. Function argument # Type ``` mkVariant :: Any -> gvariant ``` # Examples :::{.example} ## `lib.gvariant.mkVariant` usage example Example: ```nix lib.gvariant.mkArray [ (lib.gvariant.mkVariant "a string") (lib.gvariant.mkVariant (lib.gvariant.mkInt32 1)) ] ``` ::: */ mkVariant = elem: let gvarElem = mkValue elem; Loading @@ -185,23 +261,43 @@ rec { __toString = self: "<${toString self.value}>"; }; /* Returns the GVariant dictionary entry from the given key and value. /** Returns the GVariant dictionary entry from the given key and value. # Inputs `name` : The key of the entry `value` Type: : The value of the entry # Type ``` mkDictionaryEntry :: String -> Any -> gvariant ``` # Examples :::{.example} ## `lib.gvariant.mkDictionaryEntry` usage example Example: ```nix # A dictionary describing an Epiphany’s search provider [ (lib.gvariant.mkDictionaryEntry "url" (lib.gvariant.mkVariant "https://duckduckgo.com/?q=%s&t=epiphany")) (lib.gvariant.mkDictionaryEntry "bang" (lib.gvariant.mkVariant "!d")) (lib.gvariant.mkDictionaryEntry "name" (lib.gvariant.mkVariant "DuckDuckGo")) ] ``` ::: */ mkDictionaryEntry = # The key of the entry name: # The value of the entry value: let name' = mkValue name; Loading @@ -212,10 +308,25 @@ rec { __toString = self: "@${self.type} {${name'},${value'}}"; }; /* Returns the GVariant maybe from the given element type. /** Returns the GVariant maybe from the given element type. Type: # Inputs `elemType` : 1\. Function argument `elem` : 2\. Function argument # Type ``` mkMaybe :: gvariant.type -> Any -> gvariant ``` */ mkMaybe = elemType: elem: mkPrimitive (type.maybeOf elemType) elem // { Loading @@ -226,24 +337,57 @@ rec { "just ${toString self.value}"; }; /* Returns the GVariant nothing from the given element type. /** Returns the GVariant nothing from the given element type. Type: # Inputs `elemType` : 1\. Function argument # Type ``` mkNothing :: gvariant.type -> gvariant ``` */ mkNothing = elemType: mkMaybe elemType null; /* Returns the GVariant just from the given Nix value. /** Returns the GVariant just from the given Nix value. # Inputs Type: `elem` : 1\. Function argument # Type ``` mkJust :: Any -> gvariant ``` */ mkJust = elem: let gvarElem = mkValue elem; in mkMaybe gvarElem.type gvarElem; /* Returns the GVariant tuple from the given Nix list. /** Returns the GVariant tuple from the given Nix list. # Inputs `elems` : 1\. Function argument Type: # Type ``` mkTuple :: [Any] -> gvariant ``` */ mkTuple = elems: let Loading @@ -255,20 +399,42 @@ rec { "@${self.type} (${concatMapStringsSep "," toString self.value})"; }; /* Returns the GVariant boolean from the given Nix bool value. /** Returns the GVariant boolean from the given Nix bool value. # Inputs `v` : 1\. Function argument # Type Type: ``` mkBoolean :: Bool -> gvariant ``` */ mkBoolean = v: mkPrimitive type.boolean v // { __toString = self: if self.value then "true" else "false"; }; /* Returns the GVariant string from the given Nix string value. /** Returns the GVariant string from the given Nix string value. Type: # Inputs `v` : 1\. Function argument # Type ``` mkString :: String -> gvariant ``` */ mkString = v: let sanitize = s: replaceStrings [ "\n" ] [ "\\n" ] (escape [ "'" "\\" ] s); Loading @@ -276,72 +442,129 @@ rec { __toString = self: "'${sanitize self.value}'"; }; /* Returns the GVariant object path from the given Nix string value. /** Returns the GVariant object path from the given Nix string value. # Inputs Type: `v` : 1\. Function argument # Type ``` mkObjectpath :: String -> gvariant ``` */ mkObjectpath = v: mkPrimitive type.string v // { __toString = self: "objectpath '${escape [ "'" ] self.value}'"; }; /* Returns the GVariant uchar from the given Nix int value. /** Returns the GVariant uchar from the given Nix int value. Type: # Type ``` mkUchar :: Int -> gvariant ``` */ mkUchar = mkPrimitive type.uchar; /* Returns the GVariant int16 from the given Nix int value. /** Returns the GVariant int16 from the given Nix int value. # Type Type: ``` mkInt16 :: Int -> gvariant ``` */ mkInt16 = mkPrimitive type.int16; /* Returns the GVariant uint16 from the given Nix int value. /** Returns the GVariant uint16 from the given Nix int value. # Type Type: ``` mkUint16 :: Int -> gvariant ``` */ mkUint16 = mkPrimitive type.uint16; /* Returns the GVariant int32 from the given Nix int value. /** Returns the GVariant int32 from the given Nix int value. Type: # Inputs `v` : 1\. Function argument # Type ``` mkInt32 :: Int -> gvariant ``` */ mkInt32 = v: mkPrimitive type.int32 v // { __toString = self: toString self.value; }; /* Returns the GVariant uint32 from the given Nix int value. /** Returns the GVariant uint32 from the given Nix int value. # Type Type: ``` mkUint32 :: Int -> gvariant ``` */ mkUint32 = mkPrimitive type.uint32; /* Returns the GVariant int64 from the given Nix int value. /** Returns the GVariant int64 from the given Nix int value. # Type Type: ``` mkInt64 :: Int -> gvariant ``` */ mkInt64 = mkPrimitive type.int64; /* Returns the GVariant uint64 from the given Nix int value. /** Returns the GVariant uint64 from the given Nix int value. Type: # Type ``` mkUint64 :: Int -> gvariant ``` */ mkUint64 = mkPrimitive type.uint64; /* Returns the GVariant double from the given Nix float value. /** Returns the GVariant double from the given Nix float value. # Inputs `v` : 1\. Function argument # Type Type: ``` mkDouble :: Float -> gvariant ``` */ mkDouble = v: mkPrimitive type.double v // { Loading Loading
lib/gvariant.nix +314 −91 Original line number Diff line number Diff line /* /** A partial and basic implementation of GVariant formatted strings. See [GVariant Format Strings](https://docs.gtk.org/glib/gvariant-format-strings.html) for details. Loading Loading @@ -41,18 +41,29 @@ let variant = "v"; }; /* Check if a value is a GVariant value in rec { inherit type; /** Check if a value is a GVariant value # Inputs `v` Type: : value to check # Type ``` isGVariant :: Any -> Bool ``` */ isGVariant = v: v._type or "" == "gvariant"; in rec { inherit type isGVariant; intConstructors = [ { name = "mkInt32"; Loading Loading @@ -100,11 +111,22 @@ rec { } ]; /* Returns the GVariant value that most closely matches the given Nix value. /** Returns the GVariant value that most closely matches the given Nix value. If no GVariant value can be found unambiguously then error is thrown. Type: # Inputs `v` : 1\. Function argument # Type ``` mkValue :: Any -> gvariant ``` */ mkValue = v: if builtins.isBool v then Loading Loading @@ -132,14 +154,32 @@ rec { else throw "The GVariant type of “${builtins.typeOf v}” can't be inferred."; /* Returns the GVariant array from the given type of the elements and a Nix list. /** Returns the GVariant array from the given type of the elements and a Nix list. # Inputs `elems` Type: : 1\. Function argument # Type ``` mkArray :: [Any] -> gvariant ``` # Examples :::{.example} ## `lib.gvariant.mkArray` usage example Example: ```nix # Creating a string array lib.gvariant.mkArray [ "a" "b" "c" ] ``` ::: */ mkArray = elems: let Loading @@ -153,31 +193,67 @@ rec { "@${self.type} [${concatMapStringsSep "," toString self.value}]"; }; /* Returns the GVariant array from the given empty Nix list. /** Returns the GVariant array from the given empty Nix list. Type: # Inputs `elemType` : 1\. Function argument # Type ``` mkEmptyArray :: gvariant.type -> gvariant ``` Example: # Examples :::{.example} ## `lib.gvariant.mkEmptyArray` usage example ```nix # Creating an empty string array lib.gvariant.mkEmptyArray (lib.gvariant.type.string) ``` ::: */ mkEmptyArray = elemType: mkPrimitive (type.arrayOf elemType) [ ] // { __toString = self: "@${self.type} []"; }; /* Returns the GVariant variant from the given Nix value. Variants are containers /** Returns the GVariant variant from the given Nix value. Variants are containers of different GVariant type. Type: # Inputs `elem` : 1\. Function argument # Type ``` mkVariant :: Any -> gvariant ``` # Examples :::{.example} ## `lib.gvariant.mkVariant` usage example Example: ```nix lib.gvariant.mkArray [ (lib.gvariant.mkVariant "a string") (lib.gvariant.mkVariant (lib.gvariant.mkInt32 1)) ] ``` ::: */ mkVariant = elem: let gvarElem = mkValue elem; Loading @@ -185,23 +261,43 @@ rec { __toString = self: "<${toString self.value}>"; }; /* Returns the GVariant dictionary entry from the given key and value. /** Returns the GVariant dictionary entry from the given key and value. # Inputs `name` : The key of the entry `value` Type: : The value of the entry # Type ``` mkDictionaryEntry :: String -> Any -> gvariant ``` # Examples :::{.example} ## `lib.gvariant.mkDictionaryEntry` usage example Example: ```nix # A dictionary describing an Epiphany’s search provider [ (lib.gvariant.mkDictionaryEntry "url" (lib.gvariant.mkVariant "https://duckduckgo.com/?q=%s&t=epiphany")) (lib.gvariant.mkDictionaryEntry "bang" (lib.gvariant.mkVariant "!d")) (lib.gvariant.mkDictionaryEntry "name" (lib.gvariant.mkVariant "DuckDuckGo")) ] ``` ::: */ mkDictionaryEntry = # The key of the entry name: # The value of the entry value: let name' = mkValue name; Loading @@ -212,10 +308,25 @@ rec { __toString = self: "@${self.type} {${name'},${value'}}"; }; /* Returns the GVariant maybe from the given element type. /** Returns the GVariant maybe from the given element type. Type: # Inputs `elemType` : 1\. Function argument `elem` : 2\. Function argument # Type ``` mkMaybe :: gvariant.type -> Any -> gvariant ``` */ mkMaybe = elemType: elem: mkPrimitive (type.maybeOf elemType) elem // { Loading @@ -226,24 +337,57 @@ rec { "just ${toString self.value}"; }; /* Returns the GVariant nothing from the given element type. /** Returns the GVariant nothing from the given element type. Type: # Inputs `elemType` : 1\. Function argument # Type ``` mkNothing :: gvariant.type -> gvariant ``` */ mkNothing = elemType: mkMaybe elemType null; /* Returns the GVariant just from the given Nix value. /** Returns the GVariant just from the given Nix value. # Inputs Type: `elem` : 1\. Function argument # Type ``` mkJust :: Any -> gvariant ``` */ mkJust = elem: let gvarElem = mkValue elem; in mkMaybe gvarElem.type gvarElem; /* Returns the GVariant tuple from the given Nix list. /** Returns the GVariant tuple from the given Nix list. # Inputs `elems` : 1\. Function argument Type: # Type ``` mkTuple :: [Any] -> gvariant ``` */ mkTuple = elems: let Loading @@ -255,20 +399,42 @@ rec { "@${self.type} (${concatMapStringsSep "," toString self.value})"; }; /* Returns the GVariant boolean from the given Nix bool value. /** Returns the GVariant boolean from the given Nix bool value. # Inputs `v` : 1\. Function argument # Type Type: ``` mkBoolean :: Bool -> gvariant ``` */ mkBoolean = v: mkPrimitive type.boolean v // { __toString = self: if self.value then "true" else "false"; }; /* Returns the GVariant string from the given Nix string value. /** Returns the GVariant string from the given Nix string value. Type: # Inputs `v` : 1\. Function argument # Type ``` mkString :: String -> gvariant ``` */ mkString = v: let sanitize = s: replaceStrings [ "\n" ] [ "\\n" ] (escape [ "'" "\\" ] s); Loading @@ -276,72 +442,129 @@ rec { __toString = self: "'${sanitize self.value}'"; }; /* Returns the GVariant object path from the given Nix string value. /** Returns the GVariant object path from the given Nix string value. # Inputs Type: `v` : 1\. Function argument # Type ``` mkObjectpath :: String -> gvariant ``` */ mkObjectpath = v: mkPrimitive type.string v // { __toString = self: "objectpath '${escape [ "'" ] self.value}'"; }; /* Returns the GVariant uchar from the given Nix int value. /** Returns the GVariant uchar from the given Nix int value. Type: # Type ``` mkUchar :: Int -> gvariant ``` */ mkUchar = mkPrimitive type.uchar; /* Returns the GVariant int16 from the given Nix int value. /** Returns the GVariant int16 from the given Nix int value. # Type Type: ``` mkInt16 :: Int -> gvariant ``` */ mkInt16 = mkPrimitive type.int16; /* Returns the GVariant uint16 from the given Nix int value. /** Returns the GVariant uint16 from the given Nix int value. # Type Type: ``` mkUint16 :: Int -> gvariant ``` */ mkUint16 = mkPrimitive type.uint16; /* Returns the GVariant int32 from the given Nix int value. /** Returns the GVariant int32 from the given Nix int value. Type: # Inputs `v` : 1\. Function argument # Type ``` mkInt32 :: Int -> gvariant ``` */ mkInt32 = v: mkPrimitive type.int32 v // { __toString = self: toString self.value; }; /* Returns the GVariant uint32 from the given Nix int value. /** Returns the GVariant uint32 from the given Nix int value. # Type Type: ``` mkUint32 :: Int -> gvariant ``` */ mkUint32 = mkPrimitive type.uint32; /* Returns the GVariant int64 from the given Nix int value. /** Returns the GVariant int64 from the given Nix int value. # Type Type: ``` mkInt64 :: Int -> gvariant ``` */ mkInt64 = mkPrimitive type.int64; /* Returns the GVariant uint64 from the given Nix int value. /** Returns the GVariant uint64 from the given Nix int value. Type: # Type ``` mkUint64 :: Int -> gvariant ``` */ mkUint64 = mkPrimitive type.uint64; /* Returns the GVariant double from the given Nix float value. /** Returns the GVariant double from the given Nix float value. # Inputs `v` : 1\. Function argument # Type Type: ``` mkDouble :: Float -> gvariant ``` */ mkDouble = v: mkPrimitive type.double v // { Loading