add generation impl and interface