핵심 타입인 View임 render layout desired_size는 대충 그리기용 함수인데 on_event가 제일 중요함
SelectView의 구현코드를 들고와서 설명해봄
state는 유저가 그때그때 필요한 상태값이 들어있음 대부분 View들은 여기에 무슨 타입이 들어오던간에 상관없고 유저가 후술할 모나딕 함수로 클로저 끼워넣을때 필요한 값임
클로저에 &mut 넣는게 아주 빡치는 러스트 입장에선 이런식으로 틈을 만들어주면 아주 유용하게 사용 가능함
Event와 Message는 라이브러리 독립적으로 View가 개별적으로 만든 타입이고 다른데서 입력 이밴트를 이 View의 Event로 만드는 작업이 필요함
그리고 그걸 도와주는 타입들이 이것들임
지금 당장 만들어둔건 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))을 구현하게됨 이밴트와 메세지 타입이 모두 바뀐걸 알수잇따
일단 map으로 SelectViewMessage를 bool로 변환했음
SelectView는 View(S, SelectViewEvent, SelectViewMessage)를 구현하는데
이걸로 View(S, SelectViewEvent, bool)가됨
그리고 map_opt_e로 Event -> Option(SelectViewEvent)를 넣음
이제 다루기 쉽게 View(S, Event, Option(bool))이 되었음
나머지는 젖절하게 이밴트 핸들링을 해주면 된다 이거야
젖절하게 해야하는군요
젖절한게 중요합니다