must implements `AdapterInterface`