code: func (c *Client) FindOrganization(ctx context.Context, filter platform.OrganizationFilter) (*platform.Organization, error) {
  	op := getOp(platform.OpFindOrganization)
  	if filter.ID != nil {
  		o, err := c.FindOrganizationByID(ctx, *filter.ID)
  		if err != nil {
  			return nil, &platform.Error{
  				Err: err,
  				Op:  op,
  			}
  		}
  		return o, nil
  	}
  
  	if filter.Name != nil {
  		o, err := c.FindOrganizationByName(ctx, *filter.Name)
  		if err != nil {
  			return nil, &platform.Error{
  				Err: err,
  				Op:  op,
  			}
  		}
  		return o, nil
  	}
  
  	filterFn := filterOrganizationsFn(filter)
  
  	var o *platform.Organization
  	err := c.db.View(func(tx *bolt.Tx) error {
  		return forEachOrganization(ctx, tx, func(org *platform.Organization) bool {
  			if filterFn(org) {
  				o = org
  				return false
  			}
  			return true
  		})
  	})
  
  	if err != nil {
  		return nil, &platform.Error{
  			Op:  op,
  			Err: err,
  		}
  	}
  
  	if o == nil {
  		return nil, &platform.Error{
  			Code: platform.ENotFound,
  			Op:   op,
  			Msg:  "organization not found",
  		}
  	}
  
  	return o, nil
  }
docs: // FindOrganization retrives a organization using an arbitrary organization filter.
  // Filters using ID, or Name should be efficient.
  // Other filters will do a linear scan across organizations until it finds a match.