# Metadata exports for GCCRS
**Statement:** Rustc support several different metadata outputs which are used in order to support importing crates. We need to support this, there is code in gccrs for the simple case and a framework that we can work to ensure we complete the metadata exports.
**Current State:** Currently the metadata export is about a general and export all the public stuff but missing a lot via the encoded AST dump. It doesn't support any format like rlib , clib to export the metadata.
**ToDo:** Take the general metadata and export it according to their crate type format.
**Implemention Ideas:**
1. *Create a Struct:* Create a struct that represent the metadata for a crate. This struct contains a `root` field which representing the root module of the crate. The `root` module contains all of the other modules and items in the crate. Where each node contain a specific crate-type.
2. *Traverses the AST:* Traverses the AST and extracts the relevant metadata for the specified crate type using `jq` based on the value of the crate-type field in the AST dump.
-For `lib`: Export all the crates functions,type and other symbols.
-For `rlib`: Export rust library crates functions, type and other symbols.
-For `clib`: Export extern C functions.
-For `dylib`: Export rust dynamic library crates functions, type and other symbols.
-For `staticlib`: Export rust rust static library crates functions, type and other symbols.
-For `cdylib`: Export system dynamic library crates functions, type and other symbols.
3. *Export via file:* We can export the metadata via writeing it on files with different extensions.
-For `lib`: For linux or mac with `.so` extension and for windows `.dll` extension.
-For `rlib`: `.rlib` extension for all the systems
-For `clib`: `.clib` extension for all the systems
-For `dylib`,`cdylib`: For linux with `.so` extension, for mac `.dylib` extension and for windows `.dll` extension.
-For `staticlib`: For linux or mac with `.a` extension and for windows `.lib` extension.