Projects STRLCPY graphql-engine Commits 6f8470ca
🤬
  • break out `graphql_config` resolving step (#450)

    <!-- Thank you for submitting this PR! :) -->
    
    ## Description
    
    Resolving metadata is pretty messy, so we're breaking it into more
    explicit steps. This breaks out the first, and arguably most trivial
    step.
    
    Functional no-op.
    
    V3_GIT_ORIGIN_REV_ID: eca1ce3276f826e769ac4a29d62504542e41848d
  • Loading...
  • Daniel Harvey committed with hasura-bot 1 month ago
    6f8470ca
    1 parent e6829651
  • ■ ■ ■ ■ ■ ■
    v3/crates/engine/src/metadata/resolved/metadata.rs
    skipped 29 lines
    30 30   resolve_data_connector_type_mapping, resolve_object_boolean_expression_type,
    31 31   ObjectBooleanExpressionType, ScalarTypeRepresentation, TypeMapping,
    32 32  };
    33  -use crate::metadata::resolved::graphql_config::{GlobalGraphqlConfig, GraphqlConfig};
     33 +use crate::metadata::resolved::stages::graphql_config::{GlobalGraphqlConfig, GraphqlConfig};
    34 34   
    35 35  /// Resolved and validated metadata for a project. Used internally in the v3 server.
    36 36  #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
    skipped 69 lines
    106 106  /*******************
    107 107   Functions to validate and resolve OpenDD spec to internal metadata
    108 108  *******************/
    109  -pub fn resolve_metadata(metadata: open_dds::Metadata) -> Result<Metadata, Error> {
    110  - let metadata_accessor: open_dds::accessor::MetadataAccessor =
    111  - open_dds::accessor::MetadataAccessor::new(metadata);
    112  - 
     109 +pub fn resolve_metadata(
     110 + metadata_accessor: open_dds::accessor::MetadataAccessor,
     111 + graphql_config: GraphqlConfig,
     112 +) -> Result<Metadata, Error> {
    113 113   // resolve data connectors
    114 114   let mut data_connectors = resolve_data_connectors(&metadata_accessor)?;
    115 115   
    skipped 41 lines
    157 157   &types,
    158 158   &mut existing_graphql_types,
    159 159   )?;
    160  - 
    161  - let graphql_config =
    162  - GraphqlConfig::new(&metadata_accessor.graphql_config, &metadata_accessor.flags)?;
    163 160   
    164 161   // resolve models
    165 162   // TODO: validate types
    skipped 635 lines
  • ■ ■ ■ ■
    v3/crates/engine/src/metadata/resolved/model.rs
    skipped 1 lines
    2 2  use crate::metadata::resolved::data_connector::get_simple_scalar;
    3 3  use crate::metadata::resolved::data_connector::{DataConnectorContext, DataConnectorLink};
    4 4  use crate::metadata::resolved::error::{Error, GraphqlConfigError, RelationshipError};
    5  -use crate::metadata::resolved::graphql_config::GraphqlConfig;
    6 5  use crate::metadata::resolved::ndc_validation;
     6 +use crate::metadata::resolved::stages::graphql_config::GraphqlConfig;
    7 7  use crate::metadata::resolved::subgraph::{
    8 8   deserialize_qualified_btreemap, mk_qualified_type_name, mk_qualified_type_reference,
    9 9   serialize_qualified_btreemap, ArgumentInfo, Qualified, QualifiedBaseType,
    skipped 1418 lines
  • ■ ■ ■ ■ ■ ■
    v3/crates/engine/src/metadata/resolved/graphql_config.rs v3/crates/engine/src/metadata/resolved/stages/graphql_config/mod.rs
     1 +/// this is where we will resolve graphql configuration
    1 2  use crate::metadata::resolved::error::{Error, GraphqlConfigError};
    2 3  use crate::metadata::resolved::types::mk_name;
    3 4  use lang_graphql::ast::common as ast;
    skipped 48 lines
    52 53   pub global: GlobalGraphqlConfig,
    53 54  }
    54 55   
    55  -impl GraphqlConfig {
    56  - /// Create a new graphql config object.
    57  - /// `GraphqlConfig` is an optional metadata object introduced in V2 metadata
    58  - /// that is associated with the flag `require_graphql_config`. This is done
    59  - /// to ensure that we still accept older metadata which did not have this
    60  - /// object present.
    61  - ///
    62  - /// The logic to generate a new GraphqlConfig object is as follows:
    63  - /// If `graphql_config` metadata object is present use that object
    64  - /// If it is not present,
    65  - /// * check if the `require_graphql_config` flag is set (which means
    66  - /// that that object is mandatory) throw an error
    67  - /// * if the flag is not set, use the fallback object
    68  - pub fn new(
    69  - graphql_configs: &Vec<graphql_config::GraphqlConfig>,
    70  - flags: &open_dds::flags::Flags,
    71  - ) -> Result<Self, Error> {
    72  - if graphql_configs.is_empty() {
    73  - if flags.require_graphql_config {
    74  - return Err(Error::GraphqlConfigError {
    75  - graphql_config_error: GraphqlConfigError::MissingGraphqlConfig,
    76  - });
    77  - }
    78  - let graphql_config = resolve_graphql_config(&FALLBACK_GRAPHQL_CONFIG)?;
    79  - Ok(graphql_config)
    80  - } else {
    81  - match graphql_configs.as_slice() {
    82  - // There should only be one graphql config in supergraph
    83  - [graphql_config] => resolve_graphql_config(graphql_config),
    84  - _ => Err(Error::GraphqlConfigError {
    85  - graphql_config_error: GraphqlConfigError::MultipleGraphqlConfigDefinition,
    86  - }),
    87  - }
     56 +/// Create a new graphql config object.
     57 +/// `GraphqlConfig` is an optional metadata object introduced in V2 metadata
     58 +/// that is associated with the flag `require_graphql_config`. This is done
     59 +/// to ensure that we still accept older metadata which did not have this
     60 +/// object present.
     61 +///
     62 +/// The logic to generate a new GraphqlConfig object is as follows:
     63 +/// If `graphql_config` metadata object is present use that object
     64 +/// If it is not present,
     65 +/// * check if the `require_graphql_config` flag is set (which means
     66 +/// that that object is mandatory) throw an error
     67 +/// * if the flag is not set, use the fallback object
     68 +pub fn resolve(
     69 + graphql_configs: &Vec<graphql_config::GraphqlConfig>,
     70 + flags: &open_dds::flags::Flags,
     71 +) -> Result<GraphqlConfig, Error> {
     72 + if graphql_configs.is_empty() {
     73 + if flags.require_graphql_config {
     74 + return Err(Error::GraphqlConfigError {
     75 + graphql_config_error: GraphqlConfigError::MissingGraphqlConfig,
     76 + });
     77 + }
     78 + let graphql_config = resolve_graphql_config(&FALLBACK_GRAPHQL_CONFIG)?;
     79 + Ok(graphql_config)
     80 + } else {
     81 + match graphql_configs.as_slice() {
     82 + // There should only be one graphql config in supergraph
     83 + [graphql_config] => resolve_graphql_config(graphql_config),
     84 + _ => Err(Error::GraphqlConfigError {
     85 + graphql_config_error: GraphqlConfigError::MultipleGraphqlConfigDefinition,
     86 + }),
    88 87   }
    89 88   }
    90 89  }
    skipped 173 lines
  • ■ ■ ■ ■ ■ ■
    v3/crates/engine/src/metadata/resolved/stages/mod.rs
     1 +/// This is where we'll be moving explicit metadata resolve stages
     2 +pub mod graphql_config;
     3 + 
     4 +use crate::metadata::resolved::error::Error;
     5 +use crate::metadata::resolved::metadata::{resolve_metadata, Metadata};
     6 + 
     7 +/// this is where we take the input metadata and attempt to resolve a working `Metadata` object
     8 +/// currently the bulk of this lives in the `resolve_metadata` function, we'll be slowly breaking
     9 +/// it up and moving it into steps here
     10 +pub fn resolve(metadata: open_dds::Metadata) -> Result<Metadata, Error> {
     11 + let metadata_accessor: open_dds::accessor::MetadataAccessor =
     12 + open_dds::accessor::MetadataAccessor::new(metadata);
     13 + 
     14 + let graphql_config =
     15 + graphql_config::resolve(&metadata_accessor.graphql_config, &metadata_accessor.flags)?;
     16 + 
     17 + resolve_metadata(metadata_accessor, graphql_config)
     18 +}
     19 + 
  • ■ ■ ■ ■ ■
    v3/crates/engine/src/metadata/resolved.rs
    skipped 1 lines
    2 2  pub mod command;
    3 3  pub mod data_connector;
    4 4  pub mod error;
    5  -pub mod graphql_config;
    6 5  pub mod metadata;
    7 6  pub mod model;
    8 7  pub mod ndc_validation;
    9 8  pub mod permission;
    10 9  pub mod relationship;
     10 +mod stages;
    11 11  pub mod subgraph;
    12 12  mod typecheck;
    13 13  pub mod types;
    14 14   
     15 +pub use stages::resolve;
     16 + 
  • ■ ■ ■ ■ ■ ■
    v3/crates/engine/src/schema.rs
    skipped 11 lines
    12 12  use thiserror::Error;
    13 13   
    14 14  use crate::metadata::{
    15  - resolved::error::Error as ResolveMetadataError,
    16  - resolved::metadata::{resolve_metadata, Metadata},
    17  - resolved::subgraph::Qualified,
     15 + resolved::error::Error as ResolveMetadataError, resolved::metadata::Metadata,
     16 + resolved::resolve, resolved::subgraph::Qualified,
    18 17  };
    19 18   
    20 19  use self::types::{PossibleApolloFederationTypes, RootFieldAnnotation};
    skipped 16 lines
    37 36   
    38 37  impl GDS {
    39 38   pub fn new(user_metadata: open_dds::Metadata) -> Result<Self, Error> {
    40  - let resolved_metadata = resolve_metadata(user_metadata)?;
     39 + let resolved_metadata = resolve(user_metadata)?;
    41 40   Ok(GDS {
    42 41   metadata: resolved_metadata,
    43 42   })
    skipped 282 lines
Please wait...
Page is in error, reload to recover