1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-25 10:41:16 +02:00

Allow external code using libnixexpr to add types

Code that links to libnixexpr (e.g. plugins loaded with importNative, or
nix-exec) may want to provide custom value types and operations on
values of those types. For example, nix-exec is currently using sets
where a custom IO value type would be more appropriate. This commit
provides a generic hook for such types in the form of tExternal and the
ExternalBase virtual class, which contains all functions necessary for
libnixexpr's type-polymorphic functions (e.g. `showType`) to be
implemented.
This commit is contained in:
Shea Levy 2014-11-30 13:16:19 -05:00
parent 5f04da905f
commit 320659b0cd
5 changed files with 108 additions and 0 deletions

View file

@ -80,10 +80,21 @@ void printValueAsJSON(EvalState & state, bool strict,
break;
}
case tExternal:
v.external->printValueAsJSON(state, strict, str, context);
break;
default:
throw TypeError(format("cannot convert %1% to JSON") % showType(v));
}
}
void ExternalValueBase::printValueAsJSON(EvalState & state, bool strict,
std::ostream & str, PathSet & context)
{
throw TypeError(format("cannot convert %1% to JSON") % showType());
}
}