You can not select more than 25 topics 
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long. 
		
		
		
		
		
			
	
	
		
			
	
		
			 
			
			This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
		 
	
		
		
			
				
				
					
						
						
						
							 
							
								 
							
							// enums3.rs
  
						 
						
						
						
							 
							
								 
							
							// 解决所有的 TODO ,通过测试!
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							// I AM NOT DONE
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							enum  Message   { 
  
						 
						
						
						
							 
							
								 
							
							     // TODO:  根据以下的使用方式,  实现 Message 的不同类型
  
						 
						
						
						
							 
							
								 
							
							} 
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							struct  Point   { 
  
						 
						
						
						
							 
							
								 
							
							     x : u8 , 
  
						 
						
						
						
							 
							
								 
							
							     y : u8 , 
  
						 
						
						
						
							 
							
								 
							
							} 
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							struct  State   { 
  
						 
						
						
						
							 
							
								 
							
							     color : ( u8 ,   u8 ,   u8 ) , 
  
						 
						
						
						
							 
							
								 
							
							     position : Point , 
  
						 
						
						
						
							 
							
								 
							
							     quit : bool , 
  
						 
						
						
						
							 
							
								 
							
							} 
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							impl   State   { 
  
						 
						
						
						
							 
							
								 
							
							     fn  change_color ( & mut   self ,   color : ( u8 ,   u8 ,   u8 ) )   { 
  
						 
						
						
						
							 
							
								 
							
							         self . color   =   color ; 
  
						 
						
						
						
							 
							
								 
							
							     } 
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							     fn  quit ( & mut   self )   { 
  
						 
						
						
						
							 
							
								 
							
							         self . quit   =   true ; 
  
						 
						
						
						
							 
							
								 
							
							     } 
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							     fn  echo ( & self ,   s : String )   { 
  
						 
						
						
						
							 
							
								 
							
							         println! ( "{}" ,   s ) ; 
  
						 
						
						
						
							 
							
								 
							
							     } 
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							     fn  move_position ( & mut   self ,   p : Point )   { 
  
						 
						
						
						
							 
							
								 
							
							         self . position   =   p ; 
  
						 
						
						
						
							 
							
								 
							
							     } 
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							     fn  process ( & mut   self ,   message : Message )   { 
  
						 
						
						
						
							 
							
								 
							
							         // TODO:  使用 match 表达式来处理不同类型的消息
  
						 
						
						
						
							 
							
								 
							
							     } 
  
						 
						
						
						
							 
							
								 
							
							} 
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							#[ cfg(test) ] 
  
						 
						
						
						
							 
							
								 
							
							mod  tests   { 
  
						 
						
						
						
							 
							
								 
							
							     use   super ::* ; 
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							     #[ test ] 
  
						 
						
						
						
							 
							
								 
							
							     fn  test_match_message_call ( )   { 
  
						 
						
						
						
							 
							
								 
							
							         let   mut   state   =   State   { 
  
						 
						
						
						
							 
							
								 
							
							             quit : false , 
  
						 
						
						
						
							 
							
								 
							
							             position : Point   {   x : 0 ,   y : 0   } , 
  
						 
						
						
						
							 
							
								 
							
							             color : ( 0 ,   0 ,   0 ) , 
  
						 
						
						
						
							 
							
								 
							
							         } ; 
  
						 
						
						
						
							 
							
								 
							
							         state . process ( Message ::ChangeColor ( ( 255 ,   0 ,   255 ) ) ) ; 
  
						 
						
						
						
							 
							
								 
							
							         state . process ( Message ::Echo ( String ::from ( "hello world" ) ) ) ; 
  
						 
						
						
						
							 
							
								 
							
							         state . process ( Message ::Move ( Point   {   x : 10 ,   y : 15   } ) ) ; 
  
						 
						
						
						
							 
							
								 
							
							         state . process ( Message ::Quit ) ; 
  
						 
						
						
						
							 
							
								 
							
							
  
						 
						
						
						
							 
							
								 
							
							         assert_eq! ( state . color ,   ( 255 ,   0 ,   255 ) ) ; 
  
						 
						
						
						
							 
							
								 
							
							         assert_eq! ( state . position . x ,   10 ) ; 
  
						 
						
						
						
							 
							
								 
							
							         assert_eq! ( state . position . y ,   15 ) ; 
  
						 
						
						
						
							 
							
								 
							
							         assert_eq! ( state . quit ,   true ) ; 
  
						 
						
						
						
							 
							
								 
							
							     } 
  
						 
						
						
						
							 
							
								 
							
							}