aboutsummaryrefslogtreecommitdiffstats
path: root/liblfvm/context.ccm
blob: 1c3057f6cde0eda1ab1e9c6ab16f24b345877985 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
 * This source code is released into the public domain.
 */

module;

#include <filesystem>

export module liblfvm:context;

namespace lfvm {

/*
 * Our global context.
 */

export struct context {
	// The database directory where our configuration is stored.
	auto dbdir(this context const &self) -> std::filesystem::path
	{
		return self._dbdir;
	}

	// The directory where VM configurations are stored (usually a
	// subdirectory of dbdir).
	auto vmconfdir(this context const &self) -> std::filesystem::path
	{
		return self.dbdir() / "vm";
	}

	// The directory where disk configurations are stored (usually a
	// subdirectory of dbdir).
	auto diskconfdir(this context const &self) -> std::filesystem::path
	{
		return self.dbdir() / "disk";
	}

	// The path to our configuration file.
	auto config_file(this context const &self) -> std::filesystem::path
	{
		return self.dbdir() / "config.ucl";
	}

	// The configuration file for a particular VM.
	auto vm_config_file(this context const &self,
			    std::string_view vm_name)
		-> std::filesystem::path
	{
		using namespace std::literals;
		return self.vmconfdir() / (vm_name + ".ucl"s);
	}

	// The configuration file for a particular disk.
	auto disk_config_file(this context const &self,
			      std::string_view disk_name)
		-> std::filesystem::path
	{
		using namespace std::literals;
		return self.diskconfdir() / (disk_name + ".ucl"s);
	}

private:
	std::filesystem::path _dbdir = LFVM_DBDIR;
};

export auto get_context() -> context & {
	static context ctx;
	return ctx;
}

} // namespace lfvm