func NewDefaultTransformer()

in wstl1/mapping_engine/transform/transform.go [138:221]


func NewDefaultTransformer(ctx context.Context, config *dhpb.DataHarmonizationConfig, tconfig TransformationConfig, setters ...Option) (*DefaultTransformer, error) {
	t := &DefaultTransformer{
		registry:                types.NewRegistry(),
		dataHarmonizationConfig: config,
		transformationConfig:    tconfig,
	}

	if err := registerall.RegisterAll(t.registry); err != nil {
		return nil, err
	}

	options := &Options{}
	for _, setter := range setters {
		setter(options)
	}

	gcsutil.InitializeClient(options.GCSClient)

	if hc := config.GetHarmonizationConfig(); hc != nil {
		if err := harmonizecode.LoadCodeHarmonizationProjectors(t.registry, hc); err != nil {
			return nil, err
		}
	}

	if uc := config.GetUnitHarmonizationConfig(); uc != nil {
		if err := harmonizeunit.LoadUnitHarmonizationProjectors(t.registry, uc); err != nil {
			return nil, err
		}
	}

	mpc, err := t.LoadMappingConfig(config)
	if err != nil {
		return nil, err
	}
	t.mappingConfig = mpc

	if err := t.LoadProjectors(mpc.GetProjector()); err != nil {
		return nil, err
	}

	// Load the library configurations.
	for _, lc := range config.GetLibraryConfig() {
		if err := t.LoadProjectors(lc.Projector); err != nil {
			return nil, err
		}

		if options.CloudFunctions {
			if err := cloudfunction.LoadCloudFunctionProjectors(t.registry, lc.CloudFunction); err != nil {
				return nil, err
			}
		} else {
			if len(lc.CloudFunction) != 0 {
				return nil, &invalidCloudFunctionProjectorError{lc: lc}
			}
		}

		if err := auth.LoadServerConfigs(lc.Servers); err != nil {
			return nil, err
		}

		if options.FetchConfigs {
			if err := fetch.LoadFetchProjectors(context.Background(), t.registry, lc.HttpQuery); err != nil {
				return nil, err
			}
		} else {
			if len(lc.HttpQuery) != 0 {
				return nil, &invalidFetchProjectorError{lc: lc}
			}
		}

		for _, lib := range lc.GetUserLibraries() {
			mpc, err := loadMappingConfig(lib.GetPath(), lib.GetType())
			if err != nil {
				return nil, err
			}
			// Custom library configs should only have projectors defined, all else is ignored.
			if err := t.LoadProjectors(mpc.GetProjector()); err != nil {
				return nil, err
			}
		}
	}

	return t, nil
}