support guards and don't support encoders that require aggregate encoder instances
support simplified guards, encoders, and decoders without a path