rewrite use Moo