maybe make it `protected` so that this trait is reusable as a template for similar implementations (like the one you may have in mind)