provide template engine abstraction