@@ -1628,3 +1628,144 @@ modulemd_packager_v3_parse_module_components (yaml_parser_t *parser,
16281628
16291629 return TRUE;
16301630}
1631+
1632+
1633+ gboolean
1634+ modulemd_packager_v3_emit_yaml (ModulemdPackagerV3 * self ,
1635+ yaml_emitter_t * emitter ,
1636+ GError * * error )
1637+ {
1638+ MODULEMD_INIT_TRACE ();
1639+ g_autoptr (GError ) nested_error = NULL ;
1640+ gsize i ;
1641+ g_autoptr (GPtrArray ) keys = NULL ;
1642+ gboolean ret ;
1643+
1644+ /* Emit document headers */
1645+ if (!modulemd_yaml_emit_document_headers (
1646+ emitter , MODULEMD_YAML_DOC_PACKAGER , MD_PACKAGER_VERSION_THREE , error ))
1647+ {
1648+ return FALSE;
1649+ }
1650+
1651+ /* Start data: */
1652+ EMIT_MAPPING_START (emitter , error );
1653+
1654+ if (modulemd_packager_v3_get_module_name (self ) != NULL )
1655+ {
1656+ EMIT_KEY_VALUE (
1657+ emitter , error , "name" , modulemd_packager_v3_get_module_name (self ));
1658+ }
1659+
1660+ if (modulemd_packager_v3_get_stream_name (self ) != NULL )
1661+ {
1662+ EMIT_KEY_VALUE_FULL (emitter ,
1663+ error ,
1664+ "stream" ,
1665+ modulemd_packager_v3_get_stream_name (self ),
1666+ YAML_DOUBLE_QUOTED_SCALAR_STYLE );
1667+ }
1668+
1669+ EMIT_KEY_VALUE (
1670+ emitter , error , "summary" , modulemd_packager_v3_get_summary (self ));
1671+ EMIT_KEY_VALUE_FULL (emitter ,
1672+ error ,
1673+ "description" ,
1674+ modulemd_packager_v3_get_description (self ),
1675+ YAML_FOLDED_SCALAR_STYLE );
1676+
1677+ if (NON_EMPTY_TABLE (self -> module_licenses ))
1678+ {
1679+ EMIT_STRING_SET (emitter , error , "license" , self -> module_licenses );
1680+ }
1681+
1682+ if (self -> xmd != NULL )
1683+ {
1684+ EMIT_SCALAR (emitter , error , "xmd" );
1685+ if (!modulemd_yaml_emit_variant (emitter , self -> xmd , error ))
1686+ {
1687+ return FALSE;
1688+ }
1689+ }
1690+
1691+ if (NON_EMPTY_TABLE (self -> build_configs ))
1692+ {
1693+ EMIT_SCALAR (emitter , error , "configurations" );
1694+ EMIT_SEQUENCE_START (emitter , error );
1695+ keys =
1696+ modulemd_ordered_str_keys (self -> build_configs , modulemd_strcmp_sort );
1697+ for (i = 0 ; i < keys -> len ; i ++ )
1698+ {
1699+ ret = modulemd_build_config_emit_yaml (
1700+ g_hash_table_lookup (self -> build_configs ,
1701+ g_ptr_array_index (keys , i )),
1702+ emitter ,
1703+ error );
1704+ if (!ret )
1705+ {
1706+ return FALSE;
1707+ }
1708+ }
1709+ EMIT_SEQUENCE_END (emitter , error );
1710+ }
1711+
1712+
1713+ if (self -> community || self -> documentation || self -> tracker )
1714+ {
1715+ EMIT_SCALAR (emitter , error , "references" );
1716+ EMIT_MAPPING_START (emitter , error );
1717+ EMIT_KEY_VALUE_IF_SET (emitter , error , "community" , self -> community );
1718+ EMIT_KEY_VALUE_IF_SET (
1719+ emitter , error , "documentation" , self -> documentation );
1720+ EMIT_KEY_VALUE_IF_SET (emitter , error , "tracker" , self -> tracker );
1721+ EMIT_MAPPING_END (emitter , error );
1722+ }
1723+
1724+ EMIT_HASHTABLE_VALUES_IF_NON_EMPTY (
1725+ emitter , error , "profiles" , self -> profiles , modulemd_profile_emit_yaml );
1726+
1727+ if (NON_EMPTY_TABLE (self -> rpm_api ))
1728+ {
1729+ EMIT_SCALAR (emitter , error , "api" );
1730+ EMIT_MAPPING_START (emitter , error );
1731+ EMIT_STRING_SET (emitter , error , "rpms" , self -> rpm_api );
1732+ EMIT_MAPPING_END (emitter , error );
1733+ }
1734+
1735+ if (NON_EMPTY_TABLE (self -> rpm_filters ))
1736+ {
1737+ EMIT_SCALAR (emitter , error , "filter" );
1738+ EMIT_MAPPING_START (emitter , error );
1739+ EMIT_STRING_SET (emitter , error , "rpms" , self -> rpm_filters );
1740+ EMIT_MAPPING_END (emitter , error );
1741+ }
1742+
1743+ if (NON_EMPTY_TABLE (self -> rpm_components ) ||
1744+ NON_EMPTY_TABLE (self -> module_components ))
1745+ {
1746+ EMIT_SCALAR (emitter , error , "components" );
1747+ EMIT_MAPPING_START (emitter , error );
1748+ EMIT_HASHTABLE_VALUES_IF_NON_EMPTY (emitter ,
1749+ error ,
1750+ "rpms" ,
1751+ self -> rpm_components ,
1752+ modulemd_component_rpm_emit_yaml );
1753+ EMIT_HASHTABLE_VALUES_IF_NON_EMPTY (emitter ,
1754+ error ,
1755+ "modules" ,
1756+ self -> module_components ,
1757+ modulemd_component_module_emit_yaml );
1758+ EMIT_MAPPING_END (emitter , error );
1759+ }
1760+
1761+ /* The "data" mapping */
1762+ EMIT_MAPPING_END (emitter , error );
1763+ /* The overall document mapping */
1764+ EMIT_MAPPING_END (emitter , error );
1765+ if (!mmd_emitter_end_document (emitter , error ))
1766+ {
1767+ return FALSE;
1768+ }
1769+
1770+ return TRUE;
1771+ }
0 commit comments