code: func (m *Manifest) NewAdapter(name string, dir Direction) Adapter {
  	m.mu.Lock()
  	defer m.mu.Unlock()
  
  	switch dir {
  	case Upload:
  		if u, ok := m.uploadAdapterFuncs[name]; ok {
  			return u(name, dir)
  		}
  	case Download:
  		if d, ok := m.downloadAdapterFuncs[name]; ok {
  			return d(name, dir)
  		}
  	}
  	return nil
  }
docs: // Create a new adapter by name and direction, or nil if doesn't exist