2020-07-29
2067
#rust
Thomas Eizinger
22465
Jul 29, 2020 â‹… 7 min read

How to use the Rust compiler as your integration testing framework

Thomas Eizinger I like to think about systems as a whole instead of just dealing with the frontend or backend. Quality matters a lot to me, concerning both the end product and the engineering process that leads to it.

Recent posts:

8 Reasons Your Next.js App Is Slow — And How To Fix Them

8 reasons your Next.js app is slow — and how to fix them

You don’t need to guess what’s wrong with your Next.js app. I’ve mapped out the 8 biggest performance traps and the fixes that actually work.

Chizaram Ken
Jun 20, 2025 â‹… 16 min read
how to truncate text in CSS (single and multi-line)

How to truncate text in CSS (single and multi-line)

Learn how to truncate text with three dots in CSS, and use two reliable CSS text truncation techniques while covering single-line and multi-line truncations.

Chinedu Okere
Jun 20, 2025 â‹… 10 min read
how to use the Interest Invoker API for better, more accessible UX

How to use the Interest Invoker API for better, more accessible UX

Explore how to use Google’s new experimental Interest Invoker API for delays, popovers, and smarter hover UX.

Emmanuel John
Jun 19, 2025 â‹… 7 min read
How To Build And Deploy A Web App With Bolt.new

How to build and deploy a web app with Bolt

Bolt.new revolutionizes how you build and deploy web apps with no-code development and seamless AI integration.

Isaac Okoro
Jun 19, 2025 â‹… 8 min read
View all posts

2 Replies to "How to use the Rust compiler as your integration testing framework"

  1. Hi Thomas, thanks for your article! You write about Percent class, “Because the field within Percent is private, the only to construct an instance of Percent is through the new function.”

    Here is a counterexample:

    #[derive(Debug)]
    struct Percent(f64);

    impl Percent {
    fn new(value: f64) -> anyhow::Result {
    println!(“Creating a Percent object.”);
    if value > 1. {
    anyhow::bail!(“number is too big!”)
    }

    if value < 0. {
    anyhow::bail!("number is too small!")
    }

    Ok(Self(value))
    }
    }

    fn main() {
    let a = Percent::new(0.5);
    let b = Percent(1.6); // this doesn't break, but should!

    println!("Hello, {:?}!", a);
    println!("Hello, {:?}!", b);
    }

  2. Hi Ilya,

    thanks for the comment!
    You are correct that one can still construct an instance of `Percent` if you are within the same module and hence have access to private fields. There is nothing we can do about this but there is also little need to. Generally, it is important that the public API of a module maintains all of the invariants.

    In your case, I would simply put `Percent` into its own module which means all of the “usage” code has to go through the public API and can no longer access the private field. See this playground here: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0ad00716fe95313d36902679aff41f9e

    Cheers,
    Tom

Leave a Reply