code: func newPuller(endpoint registry.APIEndpoint, repoInfo *registry.RepositoryInfo, imagePullConfig *ImagePullConfig) (Puller, error) {
  	switch endpoint.Version {
  	case registry.APIVersion2:
  		return &v2Puller{
  			V2MetadataService: metadata.NewV2MetadataService(imagePullConfig.MetadataStore),
  			endpoint:          endpoint,
  			config:            imagePullConfig,
  			repoInfo:          repoInfo,
  		}, nil
  	case registry.APIVersion1:
  		return &v1Puller{
  			v1IDService: metadata.NewV1IDService(imagePullConfig.MetadataStore),
  			endpoint:    endpoint,
  			config:      imagePullConfig,
  			repoInfo:    repoInfo,
  		}, nil
  	}
  	return nil, fmt.Errorf("unknown version %d for registry %s", endpoint.Version, endpoint.URL)
  }
docs: // newPuller returns a Puller interface that will pull from either a v1 or v2
  // registry. The endpoint argument contains a Version field that determines
  // whether a v1 or v2 puller will be created. The other parameters are passed
  // through to the underlying puller implementation for use during the actual
  // pull operation.