@@ -2256,9 +2256,9 @@ impl<'de> Deserialize<'de> for SystemTime {
22562256//
22572257// #[derive(Deserialize)]
22582258// #[serde(deny_unknown_fields)]
2259- // struct Range {
2260- // start: u64 ,
2261- // end: u32 ,
2259+ // struct Range<Idx> {
2260+ // start: Idx ,
2261+ // end: Idx ,
22622262// }
22632263impl < ' de , Idx > Deserialize < ' de > for Range < Idx >
22642264where
@@ -2432,6 +2432,316 @@ mod range {
24322432
24332433////////////////////////////////////////////////////////////////////////////////
24342434
2435+ // Similar to:
2436+ //
2437+ // #[derive(Deserialize)]
2438+ // #[serde(deny_unknown_fields)]
2439+ // struct RangeFrom<Idx> {
2440+ // start: Idx,
2441+ // }
2442+ impl < ' de , Idx > Deserialize < ' de > for RangeFrom < Idx >
2443+ where
2444+ Idx : Deserialize < ' de > ,
2445+ {
2446+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
2447+ where
2448+ D : Deserializer < ' de > ,
2449+ {
2450+ let start = try!( deserializer. deserialize_struct (
2451+ "RangeFrom" ,
2452+ range_from:: FIELDS ,
2453+ range_from:: RangeFromVisitor {
2454+ expecting : "struct RangeFrom" ,
2455+ phantom : PhantomData ,
2456+ } ,
2457+ ) ) ;
2458+ Ok ( start..)
2459+ }
2460+ }
2461+
2462+ mod range_from {
2463+ use lib:: * ;
2464+
2465+ use de:: { Deserialize , Deserializer , Error , MapAccess , SeqAccess , Visitor } ;
2466+
2467+ pub const FIELDS : & ' static [ & ' static str ] = & [ "end" ] ;
2468+
2469+ // If this were outside of the serde crate, it would just use:
2470+ //
2471+ // #[derive(Deserialize)]
2472+ // #[serde(field_identifier, rename_all = "lowercase")]
2473+ enum Field {
2474+ End ,
2475+ }
2476+
2477+ impl < ' de > Deserialize < ' de > for Field {
2478+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
2479+ where
2480+ D : Deserializer < ' de > ,
2481+ {
2482+ struct FieldVisitor ;
2483+
2484+ impl < ' de > Visitor < ' de > for FieldVisitor {
2485+ type Value = Field ;
2486+
2487+ fn expecting ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
2488+ formatter. write_str ( "`end`" )
2489+ }
2490+
2491+ fn visit_str < E > ( self , value : & str ) -> Result < Self :: Value , E >
2492+ where
2493+ E : Error ,
2494+ {
2495+ match value {
2496+ "end" => Ok ( Field :: End ) ,
2497+ _ => Err ( Error :: unknown_field ( value, FIELDS ) ) ,
2498+ }
2499+ }
2500+
2501+ fn visit_bytes < E > ( self , value : & [ u8 ] ) -> Result < Self :: Value , E >
2502+ where
2503+ E : Error ,
2504+ {
2505+ match value {
2506+ b"end" => Ok ( Field :: End ) ,
2507+ _ => {
2508+ let value = :: __private:: from_utf8_lossy ( value) ;
2509+ Err ( Error :: unknown_field ( & * value, FIELDS ) )
2510+ }
2511+ }
2512+ }
2513+ }
2514+
2515+ deserializer. deserialize_identifier ( FieldVisitor )
2516+ }
2517+ }
2518+
2519+ pub struct RangeFromVisitor < Idx > {
2520+ pub expecting : & ' static str ,
2521+ pub phantom : PhantomData < Idx > ,
2522+ }
2523+
2524+ impl < ' de , Idx > Visitor < ' de > for RangeFromVisitor < Idx >
2525+ where
2526+ Idx : Deserialize < ' de > ,
2527+ {
2528+ type Value = Idx ;
2529+
2530+ fn expecting ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
2531+ formatter. write_str ( self . expecting )
2532+ }
2533+
2534+ fn visit_seq < A > ( self , mut seq : A ) -> Result < Self :: Value , A :: Error >
2535+ where
2536+ A : SeqAccess < ' de > ,
2537+ {
2538+ let end: Idx = match try!( seq. next_element ( ) ) {
2539+ Some ( value) => value,
2540+ None => {
2541+ return Err ( Error :: invalid_length ( 0 , & self ) ) ;
2542+ }
2543+ } ;
2544+ Ok ( end)
2545+ }
2546+
2547+ fn visit_map < A > ( self , mut map : A ) -> Result < Self :: Value , A :: Error >
2548+ where
2549+ A : MapAccess < ' de > ,
2550+ {
2551+ let mut end: Option < Idx > = None ;
2552+ while let Some ( key) = try!( map. next_key ( ) ) {
2553+ match key {
2554+ Field :: End => {
2555+ if end. is_some ( ) {
2556+ return Err ( <A :: Error as Error >:: duplicate_field ( "end" ) ) ;
2557+ }
2558+ end = Some ( try!( map. next_value ( ) ) ) ;
2559+ }
2560+ }
2561+ }
2562+ let end = match end {
2563+ Some ( end) => end,
2564+ None => return Err ( <A :: Error as Error >:: missing_field ( "end" ) ) ,
2565+ } ;
2566+ Ok ( end)
2567+ }
2568+ }
2569+ }
2570+
2571+ ////////////////////////////////////////////////////////////////////////////////
2572+
2573+ // Similar to:
2574+ //
2575+ // #[derive(Deserialize)]
2576+ // #[serde(deny_unknown_fields)]
2577+ // struct RangeTo<Idx> {
2578+ // start: Idx,
2579+ // }
2580+ impl < ' de , Idx > Deserialize < ' de > for RangeTo < Idx >
2581+ where
2582+ Idx : Deserialize < ' de > ,
2583+ {
2584+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
2585+ where
2586+ D : Deserializer < ' de > ,
2587+ {
2588+ let end = try!( deserializer. deserialize_struct (
2589+ "RangeTo" ,
2590+ range_to:: FIELDS ,
2591+ range_to:: RangeToVisitor {
2592+ expecting : "struct RangeTo" ,
2593+ phantom : PhantomData ,
2594+ } ,
2595+ ) ) ;
2596+ Ok ( ..end)
2597+ }
2598+ }
2599+
2600+ mod range_to {
2601+ use lib:: * ;
2602+
2603+ use de:: { Deserialize , Deserializer , Error , MapAccess , SeqAccess , Visitor } ;
2604+
2605+ pub const FIELDS : & ' static [ & ' static str ] = & [ "start" ] ;
2606+
2607+ // If this were outside of the serde crate, it would just use:
2608+ //
2609+ // #[derive(Deserialize)]
2610+ // #[serde(field_identifier, rename_all = "lowercase")]
2611+ enum Field {
2612+ Start ,
2613+ }
2614+
2615+ impl < ' de > Deserialize < ' de > for Field {
2616+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
2617+ where
2618+ D : Deserializer < ' de > ,
2619+ {
2620+ struct FieldVisitor ;
2621+
2622+ impl < ' de > Visitor < ' de > for FieldVisitor {
2623+ type Value = Field ;
2624+
2625+ fn expecting ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
2626+ formatter. write_str ( "`start`" )
2627+ }
2628+
2629+ fn visit_str < E > ( self , value : & str ) -> Result < Self :: Value , E >
2630+ where
2631+ E : Error ,
2632+ {
2633+ match value {
2634+ "start" => Ok ( Field :: Start ) ,
2635+ _ => Err ( Error :: unknown_field ( value, FIELDS ) ) ,
2636+ }
2637+ }
2638+
2639+ fn visit_bytes < E > ( self , value : & [ u8 ] ) -> Result < Self :: Value , E >
2640+ where
2641+ E : Error ,
2642+ {
2643+ match value {
2644+ b"start" => Ok ( Field :: Start ) ,
2645+ _ => {
2646+ let value = :: __private:: from_utf8_lossy ( value) ;
2647+ Err ( Error :: unknown_field ( & * value, FIELDS ) )
2648+ }
2649+ }
2650+ }
2651+ }
2652+
2653+ deserializer. deserialize_identifier ( FieldVisitor )
2654+ }
2655+ }
2656+
2657+ pub struct RangeToVisitor < Idx > {
2658+ pub expecting : & ' static str ,
2659+ pub phantom : PhantomData < Idx > ,
2660+ }
2661+
2662+ impl < ' de , Idx > Visitor < ' de > for RangeToVisitor < Idx >
2663+ where
2664+ Idx : Deserialize < ' de > ,
2665+ {
2666+ type Value = Idx ;
2667+
2668+ fn expecting ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
2669+ formatter. write_str ( self . expecting )
2670+ }
2671+
2672+ fn visit_seq < A > ( self , mut seq : A ) -> Result < Self :: Value , A :: Error >
2673+ where
2674+ A : SeqAccess < ' de > ,
2675+ {
2676+ let start: Idx = match try!( seq. next_element ( ) ) {
2677+ Some ( value) => value,
2678+ None => {
2679+ return Err ( Error :: invalid_length ( 0 , & self ) ) ;
2680+ }
2681+ } ;
2682+ Ok ( start)
2683+ }
2684+
2685+ fn visit_map < A > ( self , mut map : A ) -> Result < Self :: Value , A :: Error >
2686+ where
2687+ A : MapAccess < ' de > ,
2688+ {
2689+ let mut start: Option < Idx > = None ;
2690+ while let Some ( key) = try!( map. next_key ( ) ) {
2691+ match key {
2692+ Field :: Start => {
2693+ if start. is_some ( ) {
2694+ return Err ( <A :: Error as Error >:: duplicate_field ( "start" ) ) ;
2695+ }
2696+ start = Some ( try!( map. next_value ( ) ) ) ;
2697+ }
2698+ }
2699+ }
2700+ let start = match start {
2701+ Some ( start) => start,
2702+ None => return Err ( <A :: Error as Error >:: missing_field ( "start" ) ) ,
2703+ } ;
2704+ Ok ( start)
2705+ }
2706+ }
2707+ }
2708+
2709+ ////////////////////////////////////////////////////////////////////////////////
2710+
2711+ // Similar to:
2712+ //
2713+ // #[derive(Deserialize)]
2714+ // #[serde(deny_unknown_fields)]
2715+ // struct RangeFull;
2716+ impl < ' de > Deserialize < ' de > for RangeFull {
2717+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
2718+ where
2719+ D : Deserializer < ' de > ,
2720+ {
2721+ deserializer. deserialize_unit_struct ( "RangeFull" , RangeFullVisitor )
2722+ }
2723+ }
2724+
2725+ struct RangeFullVisitor ;
2726+
2727+ impl < ' de > Visitor < ' de > for RangeFullVisitor {
2728+ type Value = RangeFull ;
2729+
2730+ fn expecting ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
2731+ formatter. write_str ( "unit" )
2732+ }
2733+
2734+ #[ inline]
2735+ fn visit_unit < E > ( self ) -> Result < Self :: Value , E >
2736+ where
2737+ E : Error ,
2738+ {
2739+ Ok ( ..)
2740+ }
2741+ }
2742+
2743+ ////////////////////////////////////////////////////////////////////////////////
2744+
24352745#[ cfg( any( not( no_ops_bound) , all( feature = "std" , not( no_collections_bound) ) ) ) ]
24362746impl < ' de , T > Deserialize < ' de > for Bound < T >
24372747where
0 commit comments