nlib
nn::nlib::UriTemplate クラスfinal

URI Template(RFC 6570, Level3)をサポートします。 [詳解]

#include "nn/nlib/UriTemplate.h"

公開メンバ関数

errno_t SetTemplate (const char *str) noexcept
 テンプレートを設定します。 [詳解]
 
errno_t SetParameter (const char *param, const char *value) noexcept
 パラメータとその値を設定します。 [詳解]
 
void ResetParameter () noexcept
 パラメータとその値の設定を全てクリアします。
 
errno_t Resolve (size_t *written, char *str, size_t n) const noexcept
 テンプレートに値を代入した文字列str に書き込みます。 [詳解]
 
template<size_t N>
errno_t Resolve (size_t *written, char(&str)[N]) const noexcept
 Resolve(written, str, N)を呼び出します。
 

詳解

URI Template(RFC 6570, Level3)をサポートします。

説明
URIテンプレートとは、RFC 6570で定義された URIに'{'と'}'で囲まれた変数を交ぜ書きにしたテキストです。 変数を実体化することにより、実際のURIが簡単に作成できます。
UriTemplateクラスはRFC6570のLevel1, Level2, Level3をサポートしています。
以下が利用例です。
UriTemplate tmpl;
errno_t e = templ.SetTemplate("http://www.example.com/foo{?query,number}");
if (nlib_is_error(e)) { ERROR; }
e = templ.SetParameter("query", "mycelium");
if (nlib_is_error(e)) { ERROR; }
e = templ.SetParameter("number", "100");
if (nlib_is_error(e)) { ERROR; }
char str[256];
e = templ.Resolve(str);
if (nlib_is_error(e)) { ERROR; }
// strに"http://www.example.com/foo?query=mycelium&number=100"が書き込まれている
URI Templateの詳細についてはRFC 6570のテキストを参照してください。
参照
https://tools.ietf.org/html/rfc6570 (RFC6570)
各種例:
misc/uri/uri.cpp.

UriTemplate.h27 行目に定義があります。

関数詳解

◆ Resolve()

nn::nlib::UriTemplate::Resolve ( size_t *  written,
char *  str,
size_t  n 
) const
noexcept

テンプレートに値を代入した文字列str に書き込みます。

引数
[out]written書き込まれた文字数(ヌル文字を含まない)
[out]str文字列が格納されるバッファ
[in]nバッファ・サイズ
戻り値
0ならば成功

◆ SetParameter()

nn::nlib::UriTemplate::SetParameter ( const char *  param,
const char *  value 
)
noexcept

パラメータとその値を設定します。

引数
[in]param変数名
[in]value
戻り値
0エラーは発生していません。
EINVALparamNULLか空文字列の場合
説明
値に空文字列を入れた場合とNULLを入れた場合の動作は異なります。 NULLの場合は値が未定義となります。

◆ SetTemplate()

nn::nlib::UriTemplate::SetTemplate ( const char *  str)
noexcept

テンプレートを設定します。

引数
[in]strテンプレート文字列
戻り値
0エラーは発生していません。
EINVALstrがNULLの場合
EILSEQ'{}'内の変数リストが不正な場合
EIOテンプレート文字列が長すぎる場合
ENOMEM内部でメモリの確保に失敗した場合
説明
テンプレートを設定します。%エンコードが必要な文字は適宜%エンコードされます。

このクラス詳解は次のファイルから抽出されました: