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

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

#include "nn/nlib/UriTemplate.h"

公開メンバ関数

errno_t SetTemplate (const char *first, const char *last) noexcept
 テンプレートを設定します。 [詳解]
 
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
 URIテンプレートに値を代入した文字列をstrに書き込みます。 [詳解]
 
template<size_t N>
errno_t Resolve (size_t *written, char(&str)[N]) const noexcept
 上記関数のテンプレートオーバーロードです。
 
std::pair< errno_t, size_t > Resolve (char *str, size_t n) const noexcept
 URIテンプレートに値を代入した文字列をstrに書き込みます。 [詳解]
 
template<size_t N>
std::pair< errno_t, size_t > Resolve (char(&str)[N]) const noexcept
 上記関数のテンプレートオーバーロードです。
 
コンストラクタ、デストラクタ、及び初期化
constexpr UriTemplate () noexcept
 デフォルトコンストラクタです。
 
 ~UriTemplate () noexcept
 デストラクタです。
 
 UriTemplate (UriTemplate &&rhs)
 ムーブコンストラクタです。
 
UriTemplateoperator= (UriTemplate &&rhs)
 ムーブ代入演算子です。
 
void Reset () noexcept
 このオブジェクトをデフォルトコンストラクタの実行直後の状態にリセットします。
 

静的公開メンバ関数

static bool IsUriTemplate (const char *first, const char *last) noexcept
 文字列がURI Template(Level 3まで)であるかどうかを判定します。 [詳解]
 
static bool IsUriTemplate (const char *str) noexcept
 上記関数の引数省略版で、ヌル終端する文字列を受け取ります。
 

詳解

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

説明
URIテンプレートとは、RFC 6570で定義された URIに'{'と'}'で囲まれた変数を交ぜ書きにしたテキストです。 変数を実体化することにより、実際のURIが簡単に作成できます。
UriTemplateクラスはRFC6570のLevel1, Level2, Level3をサポートしています。
以下がコード例です。
errno_t e = templ.SetTemplate("http://www.example.com/foo{?query,number}");
SUCCEED_IF(e == 0);
e = templ.SetParameter("query", "mycelium");
SUCCEED_IF(e == 0);
e = templ.SetParameter("number", "100");
SUCCEED_IF(e == 0);
char str[256];
auto rval = templ.Resolve(str);
SUCCEED_IF(rval.first == 0);
nlib_printf("Uri: %s\n", str);
/*
Output:
Uri: 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.h29 行目に定義があります。

関数詳解

◆ IsUriTemplate()

nn::nlib::UriTemplate::IsUriTemplate ( const char *  first,
const char *  last 
)
staticnoexcept

文字列がURI Template(Level 3まで)であるかどうかを判定します。

引数
[in]first検査する文字列の先頭
[in]last検査する文字列の末尾
戻り値
文字列がURITemplateである場合はtrue、そうでなければfalse

◆ Resolve() [1/2]

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

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

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

◆ Resolve() [2/2]

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

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

引数
[out]str文字列が格納されるバッファ
[in]nバッファ・サイズ
戻り値
エラー値と書き込まれた文字数(ヌル文字を含まない)のペア

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

◆ 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 *  first,
const char *  last 
)
noexcept

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

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

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