This week I decided to work on Eakam's rost_gen
repository again because of the difficulty it gave me last time. This time I thought I would be prepared for it, and boy howdy, was that not the case. This time in fact I had much more difficulty because of the numerous changes they have made since the last cooperative lab.
NEW FEATURE
A user could run the SSG by doing either of the following:
# Option 1: use command line arguments:
ssg --input ./site --output ./build --stylesheet https://cdn.jsdelivr.net/npm/water.css@2/out/water.css --lang fr
# Option 2: use a config file
ssg --config ./ssg-config.json
The config file option means we can have a much shorter command, and instead store our options in a file.
Writing & Testing code in RUST
After I forked the project, it took a while to write the code due to the new addition of the clap
crate that was being used in Eakam's repository. So it was in a technical basis trying to relearn how options were selected and parsed. After wrapping my head around the command parsing I created a struct and function to handle config files.
use std::io::BufReader;
extern crate serde_with;
extern crate serde_json;
extern crate serde;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
#[serde_with::skip_serializing_none]
struct Config{
input: Option<String>,
output: Option<String>,
lang: Option<String>
}
I used serde
in order to parse the JSON into the created struct and then it would call the struct and parse the details into the handle_conversion()
function which was already made.
But this was before I was made aware that Option<String>
could not be parsed as a normal string. So I had to find a way to convert it, which I did but it took a while.
Using Git
It was an interesting experience trying to figure out how to remotely use git. Though it was a lot more simple than I anticipated. I now know how to test pull requests code without clicking my mouse.
Final Thoughts
It was not easy to work with an unfamiliar language yet, working in open source helps you a lot in terms of learning new rules. I have learnt, the syntax is different in every language. The technique and ideas to build are the same.
Top comments (0)