Penguin Config

Penguin-config simplifies the creation of config files using serde and serde_json.

Dependencies

Cargo.toml

toml [dependencies] serde = { version = "1.0", features = ["serde_derive"] } serde_json = { version = "1.0" } penguin-config = { git = "https://github.com/Henrik-N/penguin-config" }

Usage

window_config.json

json { "width": 640, "height": 400 }

Using derive macros

Generating a config file

```rust use penguin_config::*;

// the PenguinConfigGenerate macro will use the std::ops::Default implementation of the struct

[derive(Serialize, PenguinConfigGenerate, Default)]

[penguinconfig(path = "windowconfig.json")]

struct WindowConfig { width: u32, height: u32, }

fn generateconfig() { WindowConfig::generatepenguinconfigfile(); } ```

Reading a config file

```rust use penguin_config::*;

[derive(Deserialize, PenguinConfigFile)]

[penguinconfig(path = "windowconfig.json")]

struct WindowConfig { width: u32, height: u32, }

fn readconfig() { let config = WindowConfig::readconfig();

assert_eq!(config.width, 640);
assert_eq!(config.height, 400);

} ```

Using traits

Generating a config file

```rust use penguin_config::*;

[derive(Serialize)]

struct WindowConfig { width: u32, height: u32, } impl PenguinConfigGenerate for WindowConfig { fn generatepenguinconfigfile() { let config = WindowConfig { width: 640, height: 400 }; Serializer::filepath("window_config.json").serialize(&config); } } ```

Reading a config file

```rust use penguin_config::*;

[derive(Deserialize)]

struct WindowConfig { width: u32, height: u32, } impl PenguinConfig for WindowConfig { fn readconfig() -> Self { let config: Self = Deserializer::filepath("window_config.json").deserialize(); config } } ```

License

Licensed under MIT. Do whatever you want with it :)