code: func (d DecrypterProto) Decrypt(object interface{}, decryptFunc DecryptFunc) (interface{}, error) {
  	if !d.IsEncrypted(object) {
  		return object, nil
  	}
  
  	for _, path := range d.mapping[reflect.TypeOf(object)] {
  		if err := d.decryptStruct(object, path, decryptFunc); err != nil {
  			return nil, err
  		}
  	}
  
  	return object, nil
  }
docs: // Decrypt tries to find encrypted values in protobuf data and decrypt them. It uses IsEncrypted function on the
  // data to check if it contains any encrypted data.
  // Then it goes through provided mapping and tries to reflect all fields in the mapping and decrypt string values the
  // mappings must point to.
  // This function can accept only proto.Message and return proto.Message