diff options
Diffstat (limited to 'docs/design')
| -rw-r--r-- | docs/design/015-boundary-meaning.md | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/docs/design/015-boundary-meaning.md b/docs/design/015-boundary-meaning.md index 08a4636..41c8c0b 100644 --- a/docs/design/015-boundary-meaning.md +++ b/docs/design/015-boundary-meaning.md @@ -6,8 +6,8 @@ 보일 때 보기의 글자가 되고, 보낼 때 링크나 HTTP의 기록이 되어 다른 노드의 입력으로 옮겨진다. 이 문서는 그 모든 경계에서 값의 뜻이 무엇이고, 무엇을 그대로 옮기고 무엇을 거절하는지를 정한다. -한 줄로는 이렇다. **받아들인 값은 어느 길로 나오든 같다. 수는 비트까지(0의 부호만 빼고), text는 바이트까지. -받아들일 수 없는 값은 모든 들어오는 길이 거절하고, 거절한 사건은 아무것도 남기지 않는다.** +한 줄로는 이렇다. **받아들인 값은 어느 길로 나오든 같다. 수는 비트까지(0의 부호만 빼고), text는 바이트까지, bool은 +`true`나 `false`로. 받아들일 수 없는 값은 모든 들어오는 길이 거절하고, 거절한 사건은 아무것도 남기지 않는다.** ## 수 @@ -30,6 +30,21 @@ - **보낼 때.** 출력의 u32 필드에 준 수는 범위 안의 정수여야 한다. 아니면 그 사건이 실패한다. 아무것도 남지 않고, 보내지도 않는다. +## bool + +[016](016-bool-and-i64.md)이 더한 참·거짓이다. 수가 아니다. + +- **들어올 때.** JSON의 `true`와 `false`만 받는다. `1`, `0`, `"true"`, `null`은 `json_type`으로, `True`는 JSON이 아니라서 + `json`으로 거절한다. 쿼리의 값(퍼센트 인코딩을 푼 뒤)도 `true`와 `false`만이고, 그 밖은 `query`로 거절한다. 메시지의 행도 + 같다. 페이로드에서는 접두부의 1바이트이고, 0이나 1이 아니면 그 메시지가 `limit`으로 실패한다. +- **저장.** 상태와 목록의 bool은 수의 칸에 0이나 1로 담는다. 목록의 이미지는 그 필드의 종류를 bool(3)로 적는다. +- **보일 때.** 보기의 글자는 `true`나 `false`이고(보간과 같다), 표의 JSON에서는 JSON의 `true`와 `false`다. 화면도 같은 + 글자다. +- **보낼 때.** 링크는 bool을 bool인 필드로만 옮긴다(수로 넓히지 않는다). 받는 입력의 필드가 bool이 아니면 그 기록을 받지 + 않고 기다린다. HTTP 전달의 JSON은 `true`와 `false`다. +- **모듈 교체와 다시 열기.** 수가 bool이 되면 0(−0도)과 1은 `false`와 `true`가 되고, 다른 수는 새 기본값이 된다. bool이 수가 + 되면 0과 1이다. 교체가 출력의 필드를 바꾸면 기다리던 보냄의 값도 같은 규칙으로 옮긴다. + ## text - **들어올 때.** JSON 문자열은 이스케이프를 풀고 서로게이트 짝을 합친다. 날 본문은 바이트 그대로다. 결과는 UTF-8이어야 @@ -59,10 +74,11 @@ [`tests/check.py`](../../tests/check.py)의 `server_meaning`이 한 번에 본다. - 값: 수 22개(0과 −0, 2^53 부근, 가장 큰 수, 정규와 비정규의 경계, 반쯤에서의 언더플로, 1e21 부근), u32 넷, text 12개(한글, - 4바이트 UTF-8, 이스케이프, NUL, U+2028, BOM, 비문자, 4 KiB). + 4바이트 UTF-8, 이스케이프, NUL, U+2028, BOM, 비문자, 4 KiB), 그리고 모든 값에 `true`나 `false`인 bool 필드 하나. - 들어오는 길: JSON(ASCII로 이스케이프한 것과 UTF-8), 행, 쿼리와 날 본문, 링크(다른 순서, 넓힌 필드), HTTP 전달. - 나오는 길: 보기, 질의, 답, 재시작, 체크포인트 뒤의 재시작, 모듈 교체, 두 번 중계한 노드. -- 거절할 값 39가지(수, u32, text, 행)가 모든 들어오는 길에서 거절되고, 어디에도 남지 않는다. +- 거절할 값 52가지(수, u32, text, bool, 행)가 모든 들어오는 길에서 거절되고, 어디에도 남지 않는다. bool은 JSON, 쿼리, 행에서 + 거절의 종류까지 본다. 전달이 한 번씩, 순서대로 적용되는 것은 링크의 검사들(`server_links_udp_lossy`, `server_links_moved`, `server_upgrade`)과 [012](012-link-protocol.md)이 지킨다. 필드를 이름으로 받는 규칙은 `server_fields`가 지킨다. |
