53 lines
1.2 KiB
Nix
53 lines
1.2 KiB
Nix
{
|
|
inputs,
|
|
cell,
|
|
}: let
|
|
inherit (cell.lib.ty) brand-ctor brand-coalesce-seq unbranded_name;
|
|
|
|
deprecate_t = a @ {
|
|
id ? null,
|
|
msg ? null,
|
|
ctx_str ? null,
|
|
meta ? null,
|
|
/*
|
|
the higher the more likely to be removed
|
|
*/
|
|
stage ? 0,
|
|
}: let
|
|
ctx =
|
|
if ctx_str == null
|
|
then ""
|
|
else ": ${ctx_str}";
|
|
_msg =
|
|
if msg == null
|
|
then
|
|
if id == null
|
|
then "deprecated${ctx}"
|
|
else "${id} is deprecated${ctx}"
|
|
else msg;
|
|
in
|
|
builtins.trace _msg (v: (brand-ctor "deprecate" v) // {inherit stage;} // a);
|
|
in {
|
|
inherit deprecate_t;
|
|
mkDeprecate = inherit_v: a: deprecate_t ({id = builtins.head (builtins.attrNames inherit_v);} // a) (builtins.head (builtins.attrValues inherit_v));
|
|
deprecate-seq-handler = trim_stage: s: let
|
|
v = builtins.foldl' (lst: {
|
|
__value,
|
|
__brand,
|
|
...
|
|
} @ a:
|
|
if __brand == "deprecate" && trim_stage < a.stage
|
|
then lst
|
|
else
|
|
lst
|
|
++ [
|
|
(
|
|
if __brand == "deprecate" || __brand == unbranded_name
|
|
then __value
|
|
else a
|
|
)
|
|
]) [] (brand-coalesce-seq s);
|
|
in
|
|
v;
|
|
}
|