// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview A helper object used to get a pluralized string.
*/
// clang-format off
import {sendWithPromise} from './cr.js';
// clang-format on
export interface PluralStringProxy {
/**
* Obtains a pluralized string for |messageName| with |itemCount| items.
* @param messageName The name of the message.
* @param itemCount The number of items.
* @return Promise resolved with the appropriate plural string for
* |messageName| with |itemCount| items.
*/
getPluralString(messageName: string, itemCount: number): Promise<string>;
/**
* Fetches both plural strings, concatenated to one string with a comma.
* @param messageName1 The name of the first message.
* @param itemCount1 The number of items in the first message.
* @param messageName2 The name of the second message.
* @param itemCount2 The number of items in the second message.
* @return Promise resolved with the appropriate plural
* strings for both messages, concatenated with a comma+whitespace in
* between them.
*/
getPluralStringTupleWithComma(
messageName1: string, itemCount1: number, messageName2: string,
itemCount2: number): Promise<string>;
/**
* Fetches both plural strings, concatenated to one string with periods.
* @param messageName1 The name of the first message.
* @param itemCount1 The number of items in the first message.
* @param messageName2 The name of the second message.
* @param itemCount2 The number of items in the second message.
* @return Promise resolved with the appropriate plural
* strings for both messages, concatenated with a period+whitespace after
* the first message, and a period after the second message.
*/
getPluralStringTupleWithPeriods(
messageName1: string, itemCount1: number, messageName2: string,
itemCount2: number): Promise<string>;
}
export class PluralStringProxyImpl implements PluralStringProxy {
getPluralString(messageName: string, itemCount: number) {
return sendWithPromise('getPluralString', messageName, itemCount);
}
getPluralStringTupleWithComma(
messageName1: string, itemCount1: number, messageName2: string,
itemCount2: number) {
return sendWithPromise(
'getPluralStringTupleWithComma', messageName1, itemCount1, messageName2,
itemCount2);
}
getPluralStringTupleWithPeriods(
messageName1: string, itemCount1: number, messageName2: string,
itemCount2: number) {
return sendWithPromise(
'getPluralStringTupleWithPeriods', messageName1, itemCount1,
messageName2, itemCount2);
}
static getInstance(): PluralStringProxy {
return instance || (instance = new PluralStringProxyImpl());
}
static setInstance(obj: PluralStringProxy) {
instance = obj;
}
}
let instance: PluralStringProxy|null = null;