func (this *CachedSchemaRegistryClient) GetVersion(subject string, schema avro.Schema) (int32, error) { var schemaVersionMap map[avro.Schema]int32 var exists bool if schemaVersionMap, exists = this.versionCache[subject]; !exists { schemaVersionMap = make(map[avro.Schema]int32) this.versionCache[subject] = schemaVersionMap } var version int32 if version, exists = schemaVersionMap[schema]; exists { return version, nil } request, err := this.newDefaultRequest("POST", fmt.Sprintf(CHECK_IS_REGISTERED, subject), strings.NewReader(fmt.Sprintf("{\"schema\": %s}", strconv.Quote(schema.String())))) response, err := http.DefaultClient.Do(request) if err != nil { return 0, err } if this.isOK(response) { decodedResponse := &GetSubjectVersionResponse{} if this.handleSuccess(response, decodedResponse) != nil { return 0, err } schemaVersionMap[schema] = decodedResponse.Version return decodedResponse.Version, err } else { return 0, this.handleError(response) } }
func (this *CachedSchemaRegistryClient) Register(subject string, schema avro.Schema) (int32, error) { var schemaIdMap map[avro.Schema]int32 var exists bool if schemaIdMap, exists = this.schemaCache[subject]; !exists { schemaIdMap = make(map[avro.Schema]int32) this.schemaCache[subject] = schemaIdMap } var id int32 if id, exists = schemaIdMap[schema]; exists { return id, nil } request, err := this.newDefaultRequest("POST", fmt.Sprintf(REGISTER_NEW_SCHEMA, subject), strings.NewReader(fmt.Sprintf("{\"schema\": %s}", strconv.Quote(schema.String())))) response, err := http.DefaultClient.Do(request) if err != nil { return 0, err } if this.isOK(response) { decodedResponse := &RegisterSchemaResponse{} if this.handleSuccess(response, decodedResponse) != nil { return 0, err } schemaIdMap[schema] = decodedResponse.Id this.idCache[decodedResponse.Id] = schema return decodedResponse.Id, err } else { return 0, this.handleError(response) } }