rocketmq-client-nodejs
Version:
RocketMQ Node.js Client
105 lines (94 loc) • 2.86 kB
text/typescript
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Resource as ProtoResource } from '../../proto/apache/rocketmq/v2/definition_pb';
import { hashCodeOfString } from '../util';
/**
* Represents a resource with namespace and name.
*/
export class Resource {
private readonly namespace: string;
private readonly name: string;
constructor(namespace: string, name: string);
constructor(name: string);
constructor(namespaceOrName: string, name?: string) {
if (name !== undefined) {
this.namespace = namespaceOrName;
this.name = name;
} else {
this.namespace = '';
this.name = namespaceOrName;
}
}
/**
* Get the namespace.
*/
getNamespace(): string {
return this.namespace;
}
/**
* Get the name.
*/
getName(): string {
return this.name;
}
/**
* Convert to protobuf Resource.
*/
toProtobuf(): ProtoResource {
const resource = new ProtoResource();
resource.setResourceNamespace(this.namespace);
resource.setName(this.name);
return resource;
}
/**
* Create from protobuf Resource.
*/
static fromProtobuf(proto: ProtoResource): Resource {
const namespace = proto.getResourceNamespace();
const name = proto.getName();
return new Resource(namespace, name);
}
/**
* Returns a string representation of the resource.
*/
toString(): string {
if (this.namespace && this.namespace.length > 0) {
return `Resource{name='${this.name}', namespace='${this.namespace}'}`;
}
return this.name;
}
/**
* Check equality with another Resource.
*/
equals(other: Resource): boolean {
if (this === other) return true;
if (!other) return false;
return this.namespace === other.namespace &&
this.name === other.name;
}
/**
* Calculate hash code.
*/
hashCode(): number {
let hash = 17;
// eslint-disable-next-line no-bitwise
hash = (hash * 31 + hashCodeOfString(this.namespace)) | 0;
// eslint-disable-next-line no-bitwise
hash = (hash * 31 + hashCodeOfString(this.name)) | 0;
return hash;
}
}