@@ -697,3 +697,110 @@ pub fn sourcefile_attribute_parser(
697697 let ( input, sourcefile_index) = be_u16 ( input) ?;
698698 Ok ( ( input, SourceFileAttribute { sourcefile_index } ) )
699699}
700+
701+ pub fn module_attribute_parser ( input : & [ u8 ] ) -> Result < ( & [ u8 ] , ModuleAttribute ) , Err < & [ u8 ] > > {
702+ let ( input, module_name_index) = be_u16 ( input) ?;
703+ let ( input, module_flags) = be_u16 ( input) ?;
704+ let ( input, module_version_index) = be_u16 ( input) ?;
705+
706+ let ( input, requires_count) = be_u16 ( input) ?;
707+ let ( input, requires) =
708+ count ( module_requires_attribute_parser, requires_count as usize ) ( input) ?;
709+
710+ let ( input, exports_count) = be_u16 ( input) ?;
711+ let ( input, exports) = count ( module_exports_attribute_parser, exports_count as usize ) ( input) ?;
712+
713+ let ( input, opens_count) = be_u16 ( input) ?;
714+ let ( input, opens) = count ( module_opens_attribute_parser, opens_count as usize ) ( input) ?;
715+
716+ let ( input, uses_count) = be_u16 ( input) ?;
717+ let ( input, uses) = count ( be_u16, uses_count as usize ) ( input) ?;
718+
719+ let ( input, provides_count) = be_u16 ( input) ?;
720+ let ( input, provides) =
721+ count ( module_provides_attribute_parser, provides_count as usize ) ( input) ?;
722+
723+ Ok ( (
724+ input,
725+ ModuleAttribute {
726+ module_name_index,
727+ module_flags,
728+ module_version_index,
729+ requires,
730+ exports,
731+ opens,
732+ uses,
733+ provides,
734+ } ,
735+ ) )
736+ }
737+
738+ pub fn module_requires_attribute_parser (
739+ input : & [ u8 ] ,
740+ ) -> Result < ( & [ u8 ] , ModuleRequiresAttribute ) , Err < & [ u8 ] > > {
741+ let ( input, requires_index) = be_u16 ( input) ?;
742+ let ( input, requires_flags) = be_u16 ( input) ?;
743+ let ( input, requires_version_index) = be_u16 ( input) ?;
744+
745+ Ok ( (
746+ input,
747+ ModuleRequiresAttribute {
748+ requires_index,
749+ requires_flags,
750+ requires_version_index,
751+ } ,
752+ ) )
753+ }
754+
755+ pub fn module_exports_attribute_parser (
756+ input : & [ u8 ] ,
757+ ) -> Result < ( & [ u8 ] , ModuleExportsAttribute ) , Err < & [ u8 ] > > {
758+ let ( input, exports_index) = be_u16 ( input) ?;
759+ let ( input, exports_flags) = be_u16 ( input) ?;
760+ let ( input, exports_to_count) = be_u16 ( input) ?;
761+
762+ let ( input, exports_to_index) = count ( be_u16, exports_to_count as usize ) ( input) ?;
763+
764+ Ok ( (
765+ input,
766+ ModuleExportsAttribute {
767+ exports_index,
768+ exports_flags,
769+ exports_to_index,
770+ } ,
771+ ) )
772+ }
773+
774+ pub fn module_opens_attribute_parser (
775+ input : & [ u8 ] ,
776+ ) -> Result < ( & [ u8 ] , ModuleOpensAttribute ) , Err < & [ u8 ] > > {
777+ let ( input, opens_index) = be_u16 ( input) ?;
778+ let ( input, opens_flags) = be_u16 ( input) ?;
779+ let ( input, opens_to_count) = be_u16 ( input) ?;
780+ let ( input, opens_to_index) = count ( be_u16, opens_to_count as usize ) ( input) ?;
781+
782+ Ok ( (
783+ input,
784+ ModuleOpensAttribute {
785+ opens_index,
786+ opens_flags,
787+ opens_to_index,
788+ } ,
789+ ) )
790+ }
791+
792+ pub fn module_provides_attribute_parser (
793+ input : & [ u8 ] ,
794+ ) -> Result < ( & [ u8 ] , ModuleProvidesAttribute ) , Err < & [ u8 ] > > {
795+ let ( input, provides_index) = be_u16 ( input) ?;
796+ let ( input, provides_with_count) = be_u16 ( input) ?;
797+ let ( input, provides_with_index) = count ( be_u16, provides_with_count as usize ) ( input) ?;
798+
799+ Ok ( (
800+ input,
801+ ModuleProvidesAttribute {
802+ provides_index,
803+ provides_with_index,
804+ } ,
805+ ) )
806+ }
0 commit comments