pytrainer: unpin python 3.10
[NixPkgs.git] / pkgs / pkgs-lib / formats / libconfig / default.nix
blobe30c6c3c9300482239961b5eec76d3235177ae59
1 { lib
2 , pkgs
3 }:
4 let
5   inherit (pkgs) buildPackages callPackage;
7   libconfig-generator = buildPackages.rustPlatform.buildRustPackage {
8     name = "libconfig-generator";
9     version = "0.1.0";
10     src = ./src;
12     passthru.updateScript = ./update.sh;
14     cargoLock.lockFile = ./src/Cargo.lock;
15   };
17   libconfig-validator = buildPackages.runCommandCC "libconfig-validator"
18     {
19       buildInputs = with buildPackages; [ libconfig ];
20     }
21     ''
22       mkdir -p "$out/bin"
23       $CC -lconfig -x c - -o "$out/bin/libconfig-validator" ${./validator.c}
24     '';
27   format = { generator ? libconfig-generator, validator ? libconfig-validator }: {
28     inherit generator;
30     type = with lib.types;
31       let
32         valueType = (oneOf [
33           bool
34           int
35           float
36           str
37           path
38           (attrsOf valueType)
39           (listOf valueType)
40         ]) // {
41           description = "libconfig value";
42         };
43       in
44       attrsOf valueType;
46     lib = {
47       mkHex = value: {
48         _type = "hex";
49         inherit value;
50       };
51       mkOctal = value: {
52         _type = "octal";
53         inherit value;
54       };
55       mkFloat = value: {
56         _type = "float";
57         inherit value;
58       };
59       mkArray = value: {
60         _type = "array";
61         inherit value;
62       };
63       mkList = value: {
64         _type = "list";
65         inherit value;
66       };
67     };
69     generate = name: value:
70       callPackage
71         ({
72           stdenvNoCC
73         , libconfig-generator
74         , libconfig-validator
75         , writeText
76         }: stdenvNoCC.mkDerivation rec {
77           inherit name;
79           dontUnpack = true;
80           preferLocalBuild = true;
82           json = builtins.toJSON value;
83           passAsFile = [ "json" ];
85           strictDeps = true;
86           nativeBuildInputs = [ libconfig-generator ];
87           buildPhase = ''
88             runHook preBuild
89             libconfig-generator < $jsonPath > output.cfg
90             runHook postBuild
91           '';
93           doCheck = true;
94           nativeCheckInputs = [ libconfig-validator ];
95           checkPhase = ''
96             runHook preCheck
97             libconfig-validator output.cfg
98             runHook postCheck
99           '';
101           installPhase = ''
102             runHook preInstall
103             mv output.cfg $out
104             runHook postInstall
105           '';
107           passthru.json = writeText "${name}.json" json;
108         })
109         {
110           libconfig-generator = generator;
111           libconfig-validator = validator;
112         };
113   };