API の変更

API を拡張しましょう。クライアントがバースデーカードの行のリストを 指定できるようにします:

package com.example.birthdayservice;

/** バースデーサービスのインターフェース。 */
interface IBirthdayService {
    /** Happy Birthday メッセージを生成します。 */
    String wishHappyBirthday(String name, int years, in String[] text);
}

これにより、IBirthdayService のトレイト定義は次のように更新されます:

// Copyright 2024 Google LLC
// SPDX-License-Identifier: Apache-2.0

trait IBirthdayService {
    fn wishHappyBirthday(
        &self,
        name: &str,
        years: i32,
        text: &[String],
    ) -> binder::Result<String>;
}
  • AIDL 定義の String[] が Rust では &[String] に変換されていることに 注目してください。つまり、生成されるバインディングでは可能な限り 慣用的な Rust の型が使用されます:
    • in 配列引数はスライスに変換されます。
    • out 引数と inout 引数は &mut Vec<T> に変換されます。
    • 戻り値は Vec<T> を返す形に変換されます。