/* * meta.hh - Definition of the Key classes for system metadata * libhscript, the HorizonScript library for * Project Horizon * * Copyright (c) 2019 Adélie Linux and contributors. All rights reserved. * This code is licensed under the AGPL 3.0 license, as noted in the * LICENSE-code file in the root directory of this repository. * * SPDX-License-Identifier: AGPL-3.0-only */ #ifndef __HSCRIPT_META_HH_ #define __HSCRIPT_META_HH_ #include #include #include "key.hh" namespace Horizon { namespace Keys { class Hostname : public StringKey { private: Hostname(int _line, const std::string my_name) : StringKey(_line, my_name) {} public: static Key *parseFromData(const std::string &data, int lineno, int *errors, int *warnings); bool validate(ScriptOptions) const override; bool execute(ScriptOptions) const override; }; class PkgInstall : public Key { private: const std::set _pkgs; PkgInstall(int _line, const std::set my_pkgs) : Key(_line), _pkgs(my_pkgs) {} public: static Key *parseFromData(const std::string &data, int lineno, int *errors, int *warnings); const std::set packages() const { return _pkgs; } bool validate(ScriptOptions) const override; bool execute(ScriptOptions) const override; }; class Language : public StringKey { }; class Keymap : public StringKey { }; class Firmware : public BooleanKey { private: Firmware(int _line, bool _value) : BooleanKey(_line, _value) {} public: static Key *parseFromData(const std::string &, int, int*, int*); bool execute(ScriptOptions) const override; }; class Timezone : public StringKey { }; class Repository : public StringKey { private: Repository(int _line, const std::string my_url) : StringKey(_line, my_url) {} public: static Key *parseFromData(const std::string &data, int lineno, int *errors, int *warnings); bool validate(ScriptOptions) const override; bool execute(ScriptOptions) const override; }; class SigningKey : public Key { }; } } #endif /* !__HSCRIPT_META_HH_ */