mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-03-08 01:24:09 +01:00
lib/types: add types.{json,toml} from pkgs.formats
This commit is contained in:
parent
1ecc5c0db8
commit
c988f82f7a
3 changed files with 61 additions and 42 deletions
|
|
@ -1437,6 +1437,45 @@ rec {
|
|||
};
|
||||
};
|
||||
|
||||
/**
|
||||
Creates a value type suitable for serialization formats.
|
||||
|
||||
Parameters:
|
||||
- typeName: String describing the format (e.g. "JSON", "YAML", "XML")
|
||||
- nullable: Whether the structured value type allows `null` values.
|
||||
|
||||
Returns a type suitable for structured data formats that supports:
|
||||
- Basic types: boolean, integer, float, string, path
|
||||
- Complex types: attribute sets and lists
|
||||
*/
|
||||
serializableValueWith =
|
||||
{
|
||||
typeName,
|
||||
nullable ? true,
|
||||
}:
|
||||
let
|
||||
baseType = oneOf [
|
||||
bool
|
||||
int
|
||||
float
|
||||
str
|
||||
path
|
||||
(attrsOf valueType)
|
||||
(listOf valueType)
|
||||
];
|
||||
valueType = (if nullable then nullOr baseType else baseType) // {
|
||||
description = "${typeName} value";
|
||||
};
|
||||
in
|
||||
valueType;
|
||||
|
||||
json = serializableValueWith { typeName = "JSON"; };
|
||||
|
||||
toml = serializableValueWith {
|
||||
typeName = "TOML";
|
||||
nullable = false;
|
||||
};
|
||||
|
||||
# Either value of type `t1` or `t2`.
|
||||
either =
|
||||
t1: t2:
|
||||
|
|
|
|||
|
|
@ -497,6 +497,20 @@ Composed types are types that take a type as parameter. `listOf
|
|||
value of type *`to`*. Can be used to preserve backwards compatibility
|
||||
of an option if its type was changed.
|
||||
|
||||
`types.json`
|
||||
|
||||
: A type representing JSON-compatible values. This includes `null`, booleans,
|
||||
integers, floats, strings, paths, attribute sets, and lists.
|
||||
Attribute sets and lists can be arbitrarily nested and contain any JSON-compatible
|
||||
values.
|
||||
|
||||
`types.toml`
|
||||
|
||||
: A type representing TOML-compatible values. This includes booleans,
|
||||
integers, floats, strings, paths, attribute sets, and lists.
|
||||
Attribute sets and lists can be arbitrarily nested and contain any TOML-compatible
|
||||
values.
|
||||
|
||||
## Submodule {#section-option-types-submodule}
|
||||
|
||||
`submodule` is a very powerful type that defines a set of sub-options
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ let
|
|||
;
|
||||
|
||||
inherit (lib.types)
|
||||
serializableValueWith
|
||||
attrsOf
|
||||
atom
|
||||
bool
|
||||
|
|
@ -58,38 +59,6 @@ let
|
|||
submodule
|
||||
;
|
||||
|
||||
/*
|
||||
Creates a structured value type suitable for serialization formats.
|
||||
|
||||
Parameters:
|
||||
- typeName: String describing the format (e.g. "JSON", "YAML", "XML")
|
||||
- nullable: Whether the structured value type allows `null` values.
|
||||
|
||||
Returns a type suitable for structured data formats that supports:
|
||||
- Basic types: boolean, integer, float, string, path
|
||||
- Complex types: attribute sets and lists
|
||||
*/
|
||||
mkStructuredType =
|
||||
{
|
||||
typeName,
|
||||
nullable ? true,
|
||||
}:
|
||||
let
|
||||
baseType = oneOf [
|
||||
bool
|
||||
int
|
||||
float
|
||||
str
|
||||
path
|
||||
(attrsOf valueType)
|
||||
(listOf valueType)
|
||||
];
|
||||
valueType = (if nullable then nullOr baseType else baseType) // {
|
||||
description = "${typeName} value";
|
||||
};
|
||||
in
|
||||
valueType;
|
||||
|
||||
# Attributes added accidentally in https://github.com/NixOS/nixpkgs/pull/335232 (2024-08-18)
|
||||
# Deprecated in https://github.com/NixOS/nixpkgs/pull/415666 (2025-06)
|
||||
allowAliases = pkgs.config.allowAliases or false;
|
||||
|
|
@ -162,7 +131,7 @@ optionalAttrs allowAliases aliases
|
|||
{ }:
|
||||
{
|
||||
|
||||
type = mkStructuredType { typeName = "JSON"; };
|
||||
type = types.json;
|
||||
|
||||
generate =
|
||||
name: value:
|
||||
|
|
@ -203,7 +172,7 @@ optionalAttrs allowAliases aliases
|
|||
''
|
||||
) { };
|
||||
|
||||
type = mkStructuredType { typeName = "YAML 1.1"; };
|
||||
type = serializableValueWith { typeName = "YAML 1.1"; };
|
||||
|
||||
};
|
||||
|
||||
|
|
@ -226,7 +195,7 @@ optionalAttrs allowAliases aliases
|
|||
''
|
||||
) { };
|
||||
|
||||
type = mkStructuredType { typeName = "YAML 1.2"; };
|
||||
type = serializableValueWith { typeName = "YAML 1.2"; };
|
||||
|
||||
};
|
||||
|
||||
|
|
@ -487,10 +456,7 @@ optionalAttrs allowAliases aliases
|
|||
{ }:
|
||||
json { }
|
||||
// {
|
||||
type = mkStructuredType {
|
||||
typeName = "TOML";
|
||||
nullable = false;
|
||||
};
|
||||
type = types.toml;
|
||||
|
||||
generate =
|
||||
name: value:
|
||||
|
|
@ -523,7 +489,7 @@ optionalAttrs allowAliases aliases
|
|||
{ }:
|
||||
json { }
|
||||
// {
|
||||
type = mkStructuredType { typeName = "CDN"; };
|
||||
type = serializableValueWith { typeName = "CDN"; };
|
||||
|
||||
generate =
|
||||
name: value:
|
||||
|
|
@ -938,7 +904,7 @@ optionalAttrs allowAliases aliases
|
|||
pythonVars =
|
||||
{ }:
|
||||
{
|
||||
type = attrsOf (mkStructuredType {
|
||||
type = attrsOf (serializableValueWith {
|
||||
typeName = "Python";
|
||||
});
|
||||
|
||||
|
|
@ -1020,7 +986,7 @@ optionalAttrs allowAliases aliases
|
|||
}:
|
||||
if format == "badgerfish" then
|
||||
{
|
||||
type = mkStructuredType { typeName = "XML"; };
|
||||
type = serializableValueWith { typeName = "XML"; };
|
||||
|
||||
generate =
|
||||
name: value:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue