graphql-composition 0.12.2

An implementation of GraphQL federated schema composition
Documentation
use super::*;

pub(crate) fn emit_linked_schemas(ctx: &mut Context<'_>) {
    let mut linked_schemas = std::mem::take(&mut ctx.composed_directive_linked_schemas);

    linked_schemas.sort_by_key(|(linked_schema_id, _)| ctx.subgraphs.at(*linked_schema_id).url);

    let chunks = linked_schemas.chunk_by(|(linked_schema_id_a, _), (linked_schema_id_b, _)| {
        ctx.subgraphs.at(*linked_schema_id_a).url == ctx.subgraphs.at(*linked_schema_id_b).url
    });

    for chunk in chunks {
        let (linked_schema_id, _) = &chunk[0];
        let url = ctx.insert_string(ctx.subgraphs.at(*linked_schema_id).url);

        let mut imports: Vec<_> = chunk
            .iter()
            .map(|(_, imported_directive)| *imported_directive)
            .collect();

        imports.sort();
        imports.dedup();

        ctx.out.linked_schemas.push(federated::LinkDirective { url, imports });
    }
}