@@ -733,6 +733,8 @@ encode_reply(Status, TABMReq, Message, Opts) ->
733733% % AO device format (`device@1.0').
734734accept_to_codec (OriginalReq , Opts ) ->
735735 accept_to_codec (OriginalReq , undefined , Opts ).
736+ accept_to_codec (#{ <<" require-codec" >> := RequiredCodec }, _Reply , Opts ) ->
737+ mime_to_codec (RequiredCodec , Opts );
736738accept_to_codec (_OriginalReq , #{ <<" content-type" >> := _ }, _Opts ) ->
737739 <<" httpsig@1.0" >>;
738740accept_to_codec (OriginalReq , _ , Opts ) ->
@@ -743,21 +745,7 @@ accept_to_codec(OriginalReq, _, Opts) ->
743745 {accept , Accept }
744746 }
745747 ),
746- AcceptCodec =
747- hb_maps :get (
748- <<" accept-codec" >>,
749- OriginalReq ,
750- mime_to_codec (Accept , Opts ),
751- Opts
752- ),
753- case AcceptCodec of
754- not_specified ->
755- % We hold off until confirming that the codec is not directly in the
756- % message before calling `hb_opts:get/3', as it is comparatively
757- % expensive.
758- default_codec (Opts );
759- _ -> AcceptCodec
760- end .
748+ mime_to_codec (Accept , Opts ).
761749
762750% % @doc Find a codec name from a mime-type.
763751mime_to_codec (<<" application/" , Mime /binary >>, Opts ) ->
@@ -779,7 +767,11 @@ mime_to_codec(<<"application/", Mime/binary>>, Opts) ->
779767 Default
780768 end ;
781769mime_to_codec (<<" device/" , Name /binary >>, _Opts ) -> Name ;
782- mime_to_codec (_ , Opts ) -> default_codec (Opts ).
770+ mime_to_codec (Device , Opts ) ->
771+ case binary :match (Device , <<" @" >>) of
772+ nomatch -> default_codec (Opts );
773+ _ -> Device
774+ end .
783775
784776% % @doc Return the default codec for the given options.
785777default_codec (Opts ) ->
@@ -1146,7 +1138,7 @@ ans104_wasm_test() ->
11461138 Msg =
11471139 hb_message :commit (
11481140 #{
1149- <<" accept -codec" >> => <<" ans104@1.0" >>,
1141+ <<" require -codec" >> => <<" ans104@1.0" >>,
11501142 <<" codec-device" >> => <<" ans104@1.0" >>,
11511143 <<" device" >> => <<" wasm-64@1.0" >>,
11521144 <<" function" >> => <<" fac" >>,
0 commit comments