viewimage.php?id=2ab4c42ef0d0&no=24b0d769e1d32ca73ced83fa11d0283109f613b0c2e59fad7a6296a8123a82d7a08602d2ae115ec1ea393b2e8d1fc3729e34b0a1d072a879e839fc3fe21c3a20d277



핵심 타입인 View임 render layout desired_size는 대충 그리기용 함수인데 on_event가 제일 중요함


SelectView의 구현코드를 들고와서 설명해봄



viewimage.php?id=2ab4c42ef0d0&no=24b0d769e1d32ca73ced83fa11d0283109f613b0c2e59fad7a6296a8123a82d7a08602d2ae115ec1ea393b2e8d1fc3729e34b0a1d072af28be6ef369e1193a20a73d


state는 유저가 그때그때 필요한 상태값이 들어있음 대부분 View들은 여기에 무슨 타입이 들어오던간에 상관없고 유저가 후술할 모나딕 함수로 클로저 끼워넣을때 필요한 값임


클로저에 &mut 넣는게 아주 빡치는 러스트 입장에선 이런식으로 틈을 만들어주면 아주 유용하게 사용 가능함


Event와 Message는 라이브러리 독립적으로 View가 개별적으로 만든 타입이고 다른데서 입력 이밴트를 이 View의 Event로 만드는 작업이 필요함


그리고 그걸 도와주는 타입들이 이것들임



viewimage.php?id=2ab4c42ef0d0&no=24b0d769e1d32ca73ced83fa11d0283109f613b0c2e59fad7a6296a8123a82d7a08602d2ae115ec1ea393b2e8d1fc3729e34b0a1d072aa2ce43caf3de34f3a2060d6



viewimage.php?id=2ab4c42ef0d0&no=24b0d769e1d32ca73ced83fa11d0283109f613b0c2e59fad7a6296a8123a82d7a08602d2ae115ec1ea393b2e8d1fc3729e34b0a1d072f677ee68f36de5193a209d6f



지금 당장 만들어둔건 Map MapE MapOptE 3개인데 하는일은 비슷하니 MapOptE만 보자


이 타입은 V: View(S, E1, M)와 F: FnMut(&mut V, &mut S, E) -> Option(E1)를 먹고


f로 E에서 Option(E1)을 만들어낸다음 inner에 다시 넣어서 Option(M)을 만들어주는 타입임


결과적으로 View(S, E, Option(M))을 구현하게됨 이밴트와 메세지 타입이 모두 바뀐걸 알수잇따



이걸 사용하는 방법은 다음과 같음

viewimage.php?id=2ab4c42ef0d0&no=24b0d769e1d32ca73ced83fa11d0283109f613b0c2e59fad7a6296a8123a82d7a08602d2ae115ec1ea5455288212c67166b2d670951fda6bef272aaddff8f38aca


일단 map으로 SelectViewMessage를 bool로 변환했음


SelectView는 View(S, SelectViewEvent, SelectViewMessage)를 구현하는데


이걸로 View(S, SelectViewEvent, bool)가됨



그리고 map_opt_e로 Event -> Option(SelectViewEvent)를 넣음


이제 다루기 쉽게 View(S, Event, Option(bool))이 되었음



viewimage.php?id=2ab4c42ef0d0&no=24b0d769e1d32ca73ced83fa11d0283109f613b0c2e59fad7a6296a8123a82d7a08602d2ae115ec1ea393b2e8d1fc3729e34b0a1d072fe7cb93cff6ae94c3a2033d8


나머지는 젖절하게 이밴트 핸들링을 해주면 된다 이거야